小程序实现语音识别转文字,坑路历程
最近为小程序增加语音识别转文字的功能,坑路不断,特此记录。 微信开发者工具
debug的时候发现,工具上录音的路径是 采样率与编码码率限制每种采样率有对应的编码码率范围有效值,设置不合法的采样率或编码码率会导致录音失败。详细看这个 一开始没有留意,导致录音不成功。 单通道基本是必选的。因为asr只支持单通道。frameSize也是可以的,但是要考虑截断对识别的影响。暂时没有用上。 录音优化因为可能误按,于是对小于500ms的录音直接忽略。 录音文件格式微信录音文件支持mp3和aac。这2种格式文件都比较小,aac文件体积更小。这对上传来说是件好事情,速度更快。 服务器转换录音文件格式可以用java第三方库转换,也可以用Process调用ffmpeg转换。要注意的是,根据识别API的要求来做转换。比如阿里云asr的要求是:
java ProcessBuilder要使用数组传参转换音视频,习惯用ffmpeg。安装完ffmpeg之后,用java新建进程调用。 |
Process = new ProcessBuilder("ffmpeg -i in.mp3 out.wav").start(); |
一直提示CreateProcess error
。 后来看文档才发现,要以数组的形式传入参数。
这样就启动成功了。
关于java启动进程,不是本文重点,以后再写篇文章总结。
阿里云asr sdk使用问题
这个问题困扰了一天时间,回想起来真是吐血。
问题表现是微信录制的语音很多都识别不了。
最初是直接把录音mp3文件转换为pcm文件,本地能播放,但是用阿里云asr sdk却识别不了。 一开始以为是文件编码问题。特意查了asr支持的文件格式,用ffprobe检查,potplayer看属性,都没有看出问题。
甚至把启动ffmpeg进程转换也改了,用了java的库去做,还是不行。
后来为了方便测试问题,用asr的restful接口测试录音文件,都能识别! 似乎是sdk的问题。于是打开官方文档例子对比。发现用的是sdk 2.x,老铁啊你复制粘贴过来的代码竟然少了!欲哭无泪。