英语单词学习页面+单词朗读实现 -- 【2】单词朗读实现 ##HarmonyOS SDK AI##

2025-05-22 22:42:45
127次阅读
0个评论

​ 注:我需要先强调一下,我的目的不是把官网文档里的东西复制一遍……而是分享自己实际开发过程中遇到的问题和思考

仍然先放一下效果图

c20f62fda6bc0e51c518927ebc6abf3.jpg

这里对于单词和例句,都是可以通过点击图片进行播报的

这个功能的原理是通过文字转语音的形式实现的,之前也写过文章分享过在API9下如何进行文字转语音,那是通过第三方的API实现的,需要申请token,请求接口,然后再通过media去播放,整体流程较为复杂,还必须有网络支持,但是在原生鸿蒙下,是支持通过端侧AI,在本地进行文字转语音的输出的,这里使用到的是Core Speech Kit中的文本转语音功能

官网的代码很全,这里我也没必要去贴代码,只是分享一下开发过程中遇到的几个坑

​1. 这个功能属于端侧AI的功能,所以说不能在预览器和模拟器中使用

​2. 关于音量问题

在开发过程中,我对于播报的相关参数是直接照抄了官网文档,即

let extraParam: Record<string, Object> = {"queueMode": 0, "speed": 1, "volume": 2, "pitch": 1, "languageContext": 'zh-CN',
"audioType": "pcm", "soundChannel": 3, "playType": 1 };

但是在实际测试中,我发现音量小的几乎可以忽略不计……实际上要不是我是在半夜写的代码,没啥别的声音,否则我真听不到,我尝试将手机音量调到最大,但是仍然没有改变。

我仔细阅读了一下文档,对这里配置的每一个参数都进行了解学习

其中“soundChannel”是音频流类型,其不同的值对应的类型从文档里很难翻到,在Audio Kit的音频管理目录下,即StreamUsage音频流使用类型。通过文档可以看到,3这个数字对应的音频流类型是语音播报,我不知道是不是手机的bug还是其他设置方面的原因,总之我的设备(mate70rs)这个值对应的音量非常的小,我将其改为了1,即媒体或者音乐后,实测音量是跟着手机音量来的,符合开发要求

​3. 关于requestId

原先我按照文档里是把这个参数写死的,但是我发现,如果连续两次进行播放的话,就会报错。

文档中的提示是“requestId在同一实例内仅能用一次,请勿重复设置”,我一开始的理解就是你不能去初始化两个引擎……最后理解下来,就是每一次speek的时候,这个id不能相同,索性我就改成了时间戳了,代码如下:

let speakParams: textToSpeech.SpeakParams = {
  requestId: new Date().getTime().toString(),
  extraParams: extraParam
};

收藏00

登录 后评论。没有帐号? 注册 一个。