Amadeus復(fù)刻計(jì)劃(App篇 七)
前言:調(diào)用第三方軟件的activity用以語(yǔ)音識(shí)別的方式還是存在很多問(wèn)題,版本不兼容、需要另行下載第三方軟件、不同設(shè)備存在的各種問(wèn)題等,本篇?jiǎng)t是為了解決這些問(wèn)題而存在的
更新內(nèi)容:
打包了百度語(yǔ)音識(shí)別的sdk,因此本軟件可以做到開(kāi)箱即用,無(wú)需下載其他語(yǔ)音引擎,缺點(diǎn)是有效期僅有半年,并限制了15萬(wàn)次的接口調(diào)用,由于是免費(fèi)使用的,到期再行注冊(cè)應(yīng)該就可以了。
增加了復(fù)讀功能,原本打算使用chatgpt進(jìn)行人機(jī)對(duì)話,但最近大陸ip被封禁,暫無(wú)法使用,于是只能退而求其次,使用ai語(yǔ)音合成進(jìn)行復(fù)讀,為之后添加功能做準(zhǔn)備。
降低了系統(tǒng)版本要求,此次更新后安卓5.0及以上版本均可使用(之前僅限安卓10)
具體實(shí)現(xiàn):
打包百度語(yǔ)音識(shí)別的方法已有詳細(xì)教程(雖說(shuō)csdn很爛,但總能shi里刨金)
參考鏈接:https://blog.csdn.net/qq_38436214/article/details/106636277
該教程中一直到獲取語(yǔ)音識(shí)別的結(jié)果均可一步步照做,但其對(duì)結(jié)果的解析略顯復(fù)雜,筆者的處理是將字符串類(lèi)型的結(jié)果轉(zhuǎn)為json,并從中直接提取best_result鍵值對(duì),兩行代碼即可解決,如下:
res = new JSONObject(params);
input = res.getString("best_result");打包百度sdk時(shí)可能會(huì)報(bào)錯(cuò)(VAD……),請(qǐng)將minsdk改為21,實(shí)測(cè)好用,具體理由未知,猜測(cè)時(shí)該sdk使用了高版本安卓被棄用的方法
復(fù)讀功能的實(shí)現(xiàn)借助了語(yǔ)音合成的api,安卓中使用網(wǎng)絡(luò)請(qǐng)求需要單獨(dú)開(kāi)設(shè)一個(gè)線程,因此結(jié)果的獲取也需要通過(guò)消息傳遞機(jī)制交給UI界面,筆者使用的是Handle機(jī)制,個(gè)人認(rèn)為比較簡(jiǎn)單好用。
因代碼較為冗長(zhǎng)、繁瑣,此處筆者便不列出了,具體思路為:
獲取中文語(yǔ)音識(shí)別結(jié)果->翻譯成日文->通過(guò)語(yǔ)音合成api拿到相應(yīng)音頻二進(jìn)制信息->將該信息保存在本地以避免重復(fù)獲取->傳遞信息給ui界面并播放該音頻
值得注意的事:
百度語(yǔ)音識(shí)別的開(kāi)發(fā)文檔不甚完善,因此目前僅支持中文語(yǔ)音識(shí)別與部分簡(jiǎn)單的英文識(shí)別(如hello,good morning)
安卓開(kāi)發(fā)時(shí)需要小心處理權(quán)限問(wèn)題,如文件儲(chǔ)存權(quán)限不僅需要在manifest中靜態(tài)定義,并且也需要在activity中進(jìn)行動(dòng)態(tài)申請(qǐng),否則會(huì)出現(xiàn)訪問(wèn)拒絕等錯(cuò)誤
復(fù)讀功能會(huì)檢測(cè)“進(jìn)入復(fù)讀模式”之類(lèi)的關(guān)鍵詞進(jìn)入,點(diǎn)擊麥克風(fēng)即可錄制待復(fù)讀的音頻,如要退出,請(qǐng)說(shuō)“退出復(fù)讀模式”,具體操作請(qǐng)諸位自行探索。