小程序實現語音識別歌曲的功能,對接訊飛的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
歡迎評論與提問!互相交流!