微信小程序实现语音识别转文字功能及遇到的坑微信小程序实现语音识别转文字功能及遇到的坑
主要介绍了小程序实现语音识别转文字功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋
友可以参考下
最近为小程序增加语音识别转文字的功能,坑路不断,特此记录。
微信开发者工具微信开发者工具
开发者工具上的录音文件与移动端格式不同,暂时只可在工具上进行播放调试,无法直接播放或者在客户端上播放
debug的时候发现,工具上录音的路径是http://tmp/xxx.mp3,客户端上录音是wxfile://xxx.mp3。 忽悠呢,不是格式不同,是映射路
径不同。
其实做个兼容也不难,每次提示一行文字,很丑。
采样率与编码码率限制采样率与编码码率限制
每种采样率有对应的编码码率范围有效值,设置不合法的采样率或编码码率会导致录音失败。详细看这个
https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.start.html
一开始没有留意,导致录音不成功。
试过几次后,采用这样的配置,感觉录音识别率和体积之间比较好平衡:
sampleRate: 16000, //采样率
numberOfChannels: 1, //录音通道数
encodeBitRate: 96000, //编码码率
单通道基本是必选的。因为asr只支持单通道。frameSize也是可以的,但是要考虑截断对识别的影响。暂时没有用上。
录音优化录音优化
因为可能误按,于是对小于500ms的录音直接忽略。
另外,松开录音按键后,再延迟一点时间才真正stop录音。
录音文件格式录音文件格式
微信录音文件支持mp3和aac。这2种格式文件都比较小,aac文件体积更小。这对上传来说是件好事情,速度更快。
但是对语音识别转文字就不友好了。因为百度、阿里云ASR、讯飞的语音转文字接口都不支持aac和mp3,通常要求是pcm或
者wav格式。
如果微信录音能提供wav格式,那么就不用服务器做格式转换了,但是wav格式体积是mp3、aac的5到10倍,至少短期是没戏
了,这也是很多人吐槽的地方。
服务器转换录音文件格式服务器转换录音文件格式
可以用java第三方库转换,也可以用Process调用ffmpeg转换。要注意的是,根据识别API的要求来做转换。比如阿里云asr的
要求是:
支持音频编码格式:pcm(无压缩的pcm文件或wav文件)、opus,16bit采样位数的单声道(mono);
支持音频采样率:8000Hz、16000Hz;
java ProcessBuilder要使用数组传参
转换音视频,习惯用ffmpeg。安装完ffmpeg之后,用java新建进程调用。
Process = new ProcessBuilder("ffmpeg -i in.mp3 out.wav").start();
一直提示CreateProcess error。 后来看文档才发现,要以数组的形式传入参数。
Process = new ProcessBuilder("ffmpeg", "-y", "-i", "in.mp3", "out.wav").start();
这样就启动成功了。
关于java启动进程,不是本文重点,以后再写篇文章总结。
阿里云阿里云asr sdk使用问题使用问题
这个问题困扰了一天时间,回想起来真是吐血。
问题表现是微信录制的语音很多都识别不了。
最初是直接把录音mp3文件转换为pcm文件,本地能播放,但是用阿里云asr sdk却识别不了。 一开始以为是文件编码问题。