一招教你打通鸿蒙语音识别和语音播报 原创 精华
Piwriw.
发布于 2022-2-12 21:34
浏览
8收藏
前言
- 大家好久不见了,我是Piwriw.,自从上次分享完关于算法与数据结构的系列之后,我也一直想回到我的开篇的
鸿蒙
技术上,但是我一直都没有想到很好的方向😞,又是因为年前年后的问题,就一直在社区潜水🐟🐟🐟,也是在社区里面发现了很多有趣的技术,最近很火的eST实现冰墩墩,做到人手一个冰墩墩哈哈哈。 - 但是就在前几天,我"突然"想到了一个我最近一个项目也在用的技术(这个项目是我参加鸿蒙开发者创新大赛创,所以暂时没办法公布给大家,之后有机会的话,我会再分享出来)—>语言播报(Text to Speech)和语音识别(Automatic Speech Recognition, ASR),这些都基于了鸿蒙官网的开发项目下的自带的AI能力—>语音识别、语音播报,其实这二个能力可以是基础能力,但是又是十分重要的能力,毕竟谁能拒绝一个掷地有声的交互呢?😁😁
- 目前由于我本身是使用Java开发,所以在下面的代码中,我只提供Java版本,不过我是在官方文档也没有找到Js和eTS也可以支持这个能力的参考说明,在下面的代码中,我尽量实现了高可用,我把语音识别和语音播报都做成了工具类,所以可能很多详细的配置选项,大家可以上官方文档查看
- 由于本人能力有限,在过程中难免会出现错误,以及可能也有存在更好的代码,希望大家在评论区发现错误也能留言,大家一起来讨论这个问题💕
语音识别
权限申请
由于我们使用了语音,使用我们要申请录音权限
- 在config.json中配置上
ohos.permission.MICROPHONE
的能力。
五大语音识别API类
-
AsrIntent:提供ASR引擎执行时所需要传入的参数类
-
AsrError: 错误码的定义类
-
AsrListener:加载语音识别Listener
-
AsrClient:提供调用ASR引擎服务接口的类
-
AsrResultKey:ASR回调结果中的关键字封装类
至于五大类各执详细的接口内部方法对应的功能,我在这里不过多强调,在官方文档的说明已经十分详细了------>语音识别概述
六大约束和限制
- 支持的输入文件格式有wav或pcm
- 当前仅支持对普通话的识别
- 输入时长不能超过20s
- 采样要求:采样率16000Hz,单声道
- 引擎的使用必须初始化和释放处理,且调用必须在UI的主线程中进行
- 多线程调用:HUAWEI HiAI Engine不支持同一应用使用多线程调用同一接口,这样会使某一线程调用release方法后,卸载模型,导致正在运行的另一些线程出错。故多线程执行同一功能达不到并行的效果。但是引擎支持使用多线程调用不同接口,如开启两个线程同时使用文档矫正和ASR接口
高可用语音识别类
- 可能看到上面
乱七八糟
的描述,你已经“晕”了,这是什么,我看不懂啊,没关系,往下看
使用方法
-
前置: AsrUtils中audioCaptureUtils.init(“你的项目包名”);
-
- 传入context实现,ASR的初始化
-
- 使用录音开始前,start()
-
- 结束语音录入,stop()
-
- 通过getResultAndClear()方法获取识别结果,返回识别结果,并且除掉缓存,为下一次准备
AsrUtils工具类参考代码
语音播报
五大语音播报类
- TtsClient: TTS接口
- TtsListener: TTS回调
- TtsParams: TTS参数
- TtsEvent: TTS事件
- PacMap: TTS依赖
同样的具体五大类的详细接口内部功能,大家参考
语音播报开发指导
二大约束与限制
- 支持超长文本播报,最大文本长度为100000个字符
- 语音播报不支持多线程调用
高可用的语音播报类
使用方法
- 前置:这次我们要生成的为2个类:TtsUtils和AudioCaptureUtils
-
- 传入contex实现初始化
-
- 通过readText(str)方法,播报内容
AudioCaptureUtils和AsrUtils
尾声
- 这次呢,就大概给大家带来的东西就这么多了,可能看到这里,还是有朋友想知道我为什么要分享这个
语音识别
和语音播报
,众所周知事出反常必有妖,其实就是我自己踩坑了😕😕,我自己在使用的时候,因为种种不知名的问题,导致我使用的时候出现了一些奇奇怪怪的问题(后面我想可能是生命周期的问题),一开始其实我是想把这个做成service服务的,但是很遗憾失败了(其实就是我不太会,嘻嘻),后面我就想到目前这个方法,问题好像就解决了。 - 可能看到这里,我这里还想再说几句,其实我在解决我上面的问题的时候,尝试了很多很多解决方法,但是很多问题,由于一些失败也好,还是有我本身做手机App开发的经验不足,还是我采用的是Harmonyos的,是非完全开源的(讲真,有点坑),也导致了我寻找BUG的时候直接受阻了,因为看不了😑😑😑
- 好了,在最后,我祝大家语音识别和语音播报的代码食用愉快!!! 大家觉得有用的话,记得给我点个赞吧!!! 对了,求加精(期待能被抽中本次星光活动的大奖😬😬😬)!!!
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2022-2-12 23:14:32修改
赞
7
收藏 8
回复
7
3
8
相关推荐
好文,必须点赞
感谢支持
官网文档中说“HUAWEI HiAI Engine不支持同一应用使用多线程调用同一接口,这样会使某一线程调用release方法后,卸载模型,导致正在运行的另一些线程出错。”
我看是用线程池实现的,运行过程中会不会有影响?