小程序实现语音识别歌曲的功能,对接讯飞的api,踩坑篇!!

最近公司要求在小程序里实现识别搜索歌曲的功能,然后对接的是讯飞的api,本来我一个做前端的,对接第三方的文档这些应该留给后端做才对的,前端就上传一个录音给后端让他去调接口返回数据给我就好了。可是当我对接完之后发现其实这个由前端来对接还是比较好的,至少对服务器的压力没那么大。就是可怜我踩了三四天的坑,不过毕竟也是第一次接,而且也没有demo,所以接起来有点蓝廋!!!
好了开始我的踩坑之旅吧!!先奉上讯飞的文档
首先先说我碰到的坑吧:
1.json转成base64:一开始有点不懂json怎么转成base64啊?然后去查了一下小程序好像也没有提供什么方法,后来就在网上找了一个方法搬过来用了,就是先把json转字符串后再转base64。在这里插入图片描述
2.就是X-Param里面的audio_url参数,一开始傻傻的把本地的临时地址放上去了,然后想了一下,讯飞怎可能拿得啊!然后就随便录了一个放上去七牛那里了,然后拿到地址放进去,还是不行,后来看了一下原来是我录音得格式那些错了。一开始百度了一下,看到上面很多人说小程序的录音现在还不支持pcm、wav这些格式的,后来用了**wx.getRecorderManager()**发现很多格式都支持了,看了更新日志才知道是今年才开始支持这些格式的。然后录音的时候就按照讯飞的要求去录音就好了。
在这里插入图片描述
3.后来想想要是我要上传七牛的话,还要调后端接口获取上传凭证(token)那还不如叫后端接算了,然后看到文档那里写着可以传二进制数据,然后我又百思不得其解了,小程序怎么获取录音的二进制数据啊?然后我就看了一下一遍wx.getRecorderManager()里的所有方法,然后找到了这个RecorderManager.onFrameRecorded()里面有个属性frameBuffer,这个属性的类型是ArrayBuffer(录音分片数据),然后问了一下朋友,这个就是二进制的数据,但是这个需要录音的时候定义属性frameSize才会有回调RecorderManager.onFrameRecorded()。然后直接拿到数据放在data里传过去就好了。
在这里插入图片描述有点搞不懂上面图里为什么说仅支持MP3,其他格式也是可以的啊!不知道是不是微信忘改了还是怎样。具体我就不管了,反正我的问题可以就行。
4.最后再说一个搞笑的坑,前面的都做好了,然后工具里是录不了音的,我就改用真机调试了,然后就发现真机调试有坑,老是显示未连接。具体我也发了问题到微信开放社区那里了问题链接后来我就改用预览,然后发现不行,为什么真机跟工具都可以请求,为什么预览不行呢?后来才发现自己忘记再小程序平台配置讯飞的域名了。配置好了以后就啥问题都解决了!
说了一大堆的废话,最重要的还是结果!案例奉上demo:https://github.com/lzhihao04/xunfei.git
欢迎评论与提问!互相交流!