最近想給自己的代辦清單任務微信小程式想加個語音識別識別功能,廢話不多說,直接說重點,語音識別使用的是百度語音識別api,因為微信小程式的錄音輸入文件目前只能是mp3或aac 但是百度語音識別不支持這兩種(百度api介面文檔上有說明),所以需要把音頻格式轉換一下,我這邊使用的是Alvas.Audio. ...
最近想給自己的代辦清單任務微信小程式想加個語音識別識別功能,廢話不多說,直接說重點,語音識別使用的是百度語音識別api,因為微信小程式的錄音輸入文件目前只能是mp3或aac 但是百度語音識別不支持這兩種(百度api介面文檔上有說明),所以需要把音頻格式轉換一下,我這邊使用的是Alvas.Audio.dll轉換的,目前沒發現什麼問題。
百度雲賬號地址:https://login.bce.baidu.com/
Alvas.Audio下載地址:http://www.alvas.net/
1、登錄百度雲賬號後打開百度語音頁面
創建一個語音識別的應用,記錄應用的相關信息,如果API Key、Secret Key ....下載sdk......這裡廢話就不多說了api文檔上面都有 https://ai.baidu.com/docs#/ASR-Online-Csharp-SDK/top。
(這是需要註意的是百度提供的sdk引用的Newtonsoft.Json 10.0.0.0 以上的版本,所以如果您項目中使用的是低版本的,必須升級Newtonsoft.Json)
2、下載 Alvas.Audio.dll 引用到項目中,
直接上代碼
public class AudioHelper { /// <summary> /// Mp3 to Pcm /// </summary> /// <param name="stream"></param> /// <returns></returns> public static byte[] Mp3ToPcm(Stream stream) { try { //mp3 -> mp3 mono 48000 samples per second example //int sps = 48000; Mp3Reader mr = new Mp3Reader(stream); IntPtr formatMp3 = mr.ReadFormat(); byte[] dataMp3 = mr.ReadData(); mr.Close(); IntPtr formatPcm = AudioCompressionManager.GetCompatibleFormat(formatMp3, AudioCompressionManager.PcmFormatTag); //mp3 -> pcm byte[] dataPcm = AudioCompressionManager.Convert(formatMp3, formatPcm, dataMp3, false); return dataPcm; } catch (System.Exception ex) { LogManager.DefaultLogger.ErrorFormat("Mp3 to Pcm 出錯:{0}", ex.ToString()); return null; } } }
上傳語音到百度雲平臺上識別語音
/// <summary> /// 百度語音識別幫助 /// </summary> public class BaiduHelper { private readonly static Asr Client = new Baidu.Aip.Speech.Asr("你的 Api Key", "你的 Secret Key"); /// <summary> /// 語音識別 /// </summary> /// <param name="data">語音內容</param> /// <param name="text">文本內容</param> /// <param name="format">語音文件的格式,pcm 或者 wav 或者 amr。不區分大小寫。推薦pcm文件,</param> /// <param name="rate">採樣率,16000,固定值</param> /// <param name="devPid">預設1537(普通話 輸入法模型)。dev_pid 必須為整數類型。參數可選值見REST API文檔說明</param> /// <returns></returns> public static bool Recognize(byte[] data, out string text, string format = "pcm", int rate = 16000, int devPid = 1536) { text = ""; Client.Timeout = 120000; var options = new Dictionary<string, object> { {"dev_pid", devPid} }; var jObject = Client.Recognize(data, format, rate, options); if ((int)jObject.GetValue("err_no") == 0) { text = jObject["result"][0].ToString(); return true; } else { return false; } } }
微信小程式錄音上傳的代碼我就就不貼了,網上很多。官方文檔介紹的也很詳細,整個流程就是微信小程式錄音上傳到後臺,後臺轉碼後通過百度語音識別api上傳到百度雲平臺,返回結果後臺返回給前端。
下麵也是比較坑的地方,截止到這裡,語音識別基本完成了,我做到這裡的時候發現將將程式發到伺服器上,語音轉碼總是報錯,語音轉碼不成功,最後查找Alvas.Audio的官方文檔中給出瞭解決方案,
http://www.alvas.net/alvas.audio,articles.aspx#mp3-to-wav-without-desktop-experience
要麼安裝桌面體驗,要麼安裝庫文件,我選擇了安裝桌面體驗,具體怎麼安裝桌面體驗,可以百度一下,(就像安裝iis一樣)
安裝桌面體驗參考地址:https://www.cnblogs.com/asdyzh/p/9826976.html
這個時候你發佈到伺服器上的程式,音頻就會正常轉換了
下麵恭請大家同行們體驗一下我的微信小程式,體驗一下我實現的語音識別功能,
簡單介紹一下我的微信小程式:
這個是個代辦清單任務的小程式,和備忘錄相似,主要是自己用方便,簡單方便,沒有複雜的設置,記錄自己的規劃,讓自己的工作生活變的有計劃。簡單而實用。發現用的人還挺多,為了更簡單,就加上了語音識別功能,在編輯任務的時候可以不用手打字,只要說話就能識別成文字,
使用語音識別的正確姿勢
長按輸入框上按鈕,最長可一次性轉換10秒語音,
做個廣告,希望同行們的支持,小的拖家帶口感謝您的支持,感謝您的賞了.........