劉祥臻 王紅梅* 徐明澤 戚成功 張?chǎng)瓮?李平武
(東北林業(yè)大學(xué)交通學(xué)院,黑龍江 哈爾濱150040)
隨著人工智能汽車(chē)的研發(fā)和車(chē)聯(lián)網(wǎng)概念的逐步形成,人機(jī)交互的時(shí)代已經(jīng)到來(lái)。目前,國(guó)外一些公司對(duì)車(chē)載人機(jī)交互尤其是車(chē)載語(yǔ)音控制的研究走在世界的前列,但他們提供的車(chē)載語(yǔ)音控制產(chǎn)品僅面向安裝在高端汽車(chē)市場(chǎng),難以普及到大眾,而且在我國(guó)傳統(tǒng)的汽車(chē)消費(fèi)體系中,中低端市場(chǎng)才是打開(kāi)汽車(chē)消費(fèi)市場(chǎng)的主力軍。
因此,研發(fā)設(shè)計(jì)一款可應(yīng)用于傳統(tǒng)家用車(chē)的基于安卓平臺(tái)的車(chē)載語(yǔ)音控制智能音樂(lè)播放器,通過(guò)喚醒語(yǔ)音助手后由語(yǔ)音指令實(shí)時(shí)控制車(chē)載終端智能音樂(lè)播放器,大大提高了車(chē)載娛樂(lè)系統(tǒng)的安全性、娛樂(lè)性與便捷性,具有十分重要的意義。
語(yǔ)音交互過(guò)程大致可分為三部分:首先是語(yǔ)音喚醒,在語(yǔ)音喚醒前需要提示打開(kāi)系統(tǒng)麥克風(fēng)的使用權(quán)限,通過(guò)說(shuō)“輸入指令”或者點(diǎn)擊屏幕上的喚醒按鈕來(lái)初始化語(yǔ)音服務(wù),并啟動(dòng)語(yǔ)音助手;然后進(jìn)行語(yǔ)音識(shí)別,如果識(shí)別正確,則在語(yǔ)音播報(bào)相應(yīng)結(jié)果后執(zhí)行反饋,如果識(shí)別錯(cuò)誤,則播報(bào)“不好意思,我還聽(tīng)不懂以下指令+識(shí)別結(jié)果,請(qǐng)聯(lián)系開(kāi)發(fā)人員添加指令”,提示用戶(hù)進(jìn)行修正輸入;最后將系統(tǒng)的文本信息轉(zhuǎn)換成標(biāo)準(zhǔn)流暢的語(yǔ)言播報(bào),即語(yǔ)音合成(Text to Speech),下文簡(jiǎn)稱(chēng)TTS,以自然流暢接近人聲的語(yǔ)音進(jìn)行語(yǔ)音播報(bào)。
在該系統(tǒng)實(shí)現(xiàn)的整個(gè)過(guò)程中,要保證系統(tǒng)在不同的噪音環(huán)境下對(duì)語(yǔ)音指令做出準(zhǔn)確響應(yīng),并且有較高的交互成功率。
軟件通過(guò)View的顯示與隱藏起到頁(yè)面切換的效果,各個(gè)頁(yè)面具有各自的根LinearLayout,由唯一ID 標(biāo)識(shí). view_list 為列表界面,view_play 為播放器主界面,view_other 為相關(guān)的擴(kuò)展功能界面。
圖1 系統(tǒng)UI 界面設(shè)計(jì)簡(jiǎn)圖
軟件開(kāi)啟時(shí)讀取相應(yīng)文件夾下的列表文件(csv 文件),并解析出音樂(lè)文件,專(zhuān)輯圖片文件,歌詞文件的位置,讀進(jìn)列表中。
列表的播放/暫停與播放界面的“播放/暫停”按鈕功能完全一樣,列表的喜歡與播放界面的“喜歡”按鈕功能完全一樣,列表欄的排序按鈕可按照預(yù)設(shè)的排序規(guī)則對(duì)列表進(jìn)行排序,讀入按鈕可載入新的列表,并將當(dāng)前列表備份。
播放界面可顯示專(zhuān)輯圖片、播放進(jìn)度、歌詞以及實(shí)時(shí)幅度譜(由FFT 得到)。
該軟件通過(guò)百度AI 平臺(tái)的語(yǔ)音轉(zhuǎn)文字(短語(yǔ)音識(shí)別)與文字轉(zhuǎn)語(yǔ)音(語(yǔ)音合成)的API,實(shí)現(xiàn)程序的語(yǔ)音交互。
語(yǔ)音識(shí)別由自定義類(lèi)iSpeechRecognition 完成,類(lèi)設(shè)置喚醒詞監(jiān)聽(tīng)管理器WP (WaitListener) 與語(yǔ)音指令監(jiān)聽(tīng)管理器ASR(SoundListener)。通過(guò)iSpeechRecognition()進(jìn)行類(lèi)初始化后,start()啟動(dòng)語(yǔ)音輸入監(jiān)聽(tīng),為節(jié)省系統(tǒng)資源與網(wǎng)絡(luò)資源,完成后WP 處于激活狀態(tài)(等待監(jiān)聽(tīng)詞輸入),ASR 則處于休眠狀態(tài)。當(dāng)用戶(hù)點(diǎn)按語(yǔ)音控制鍵或者使用喚醒詞喚醒后ASR 激活,此時(shí)可以使用相應(yīng)語(yǔ)音指令進(jìn)行控制。當(dāng)WP 激活,ASR 休眠時(shí),說(shuō)話(huà)時(shí)只有WP 的onEvent()事件響應(yīng),此時(shí)若說(shuō)出正確的喚醒詞(“輸入指令”)且類(lèi)控制符isWakeUp 為false 時(shí)則將音樂(lè)播放器音量調(diào)整為15% (防止音樂(lè)播放聲音干擾ASR 識(shí)別),并進(jìn)行語(yǔ)音提示,提示完成后激活A(yù)SR,點(diǎn)按語(yǔ)音輸入鍵也有類(lèi)似效果。當(dāng)ASR激活時(shí)isWakeUp 為true,WP 不響應(yīng)喚醒詞,此時(shí)說(shuō)話(huà)由ASR的onEvent()響應(yīng),短語(yǔ)音識(shí)別完成后獲得識(shí)別結(jié)果keyword 調(diào)用OnFinishListen(String keyword)對(duì)識(shí)別結(jié)果進(jìn)行相應(yīng)的判斷與識(shí)別,并執(zhí)行相關(guān)操作。ASR 進(jìn)行語(yǔ)音識(shí)別時(shí)需要網(wǎng)絡(luò)支持,當(dāng)網(wǎng)絡(luò)出錯(cuò)時(shí)會(huì)無(wú)法識(shí)別出結(jié)果從而無(wú)法進(jìn)行正確的反應(yīng),此時(shí)需要手動(dòng)關(guān)閉語(yǔ)音,并進(jìn)行網(wǎng)絡(luò)設(shè)置才可用。當(dāng)一段時(shí)間無(wú)語(yǔ)音輸入時(shí)系統(tǒng)調(diào)用超時(shí)代碼,語(yǔ)音提示后休眠ASR,設(shè)置isWakeUp 為false,將音量調(diào)整為100%,此時(shí)WP 重新響應(yīng)喚醒詞。點(diǎn)按語(yǔ)音輸入鍵或說(shuō)出關(guān)閉指令也有類(lèi)似效果。語(yǔ)音播報(bào)由自定義類(lèi)iTextToSpeech 完成,類(lèi)設(shè)置SpeechSynthesizer ssr。
iTextToSpeech()初始化完成后處于待機(jī)狀態(tài),當(dāng)需要使用的時(shí)候調(diào)用ssr.speak(String)即可播報(bào)出String 的內(nèi)容。播報(bào)過(guò)程中為防止播報(bào)聲音由ASR 收錄產(chǎn)生套娃現(xiàn)象,當(dāng)isWakeUp 為true 時(shí)ssr 設(shè)置的監(jiān)聽(tīng)器 (SpeechSynthesizerListener) 調(diào)用onSynthesizeStart(String s)時(shí)休眠ASR,調(diào)用onSpeechFinish(String s)時(shí)重新激活A(yù)SR,因?yàn)閟sr 進(jìn)行TTS 需要網(wǎng)絡(luò)支持,所以當(dāng)網(wǎng)絡(luò)出錯(cuò)時(shí)會(huì)調(diào)用onError (String s, SpeechError speechError),無(wú)法重新激活A(yù)SR 從而產(chǎn)生錯(cuò)誤,此時(shí)需要手動(dòng)關(guān)閉語(yǔ)音,并進(jìn)行網(wǎng)絡(luò)設(shè)置才可用。
圖2 系統(tǒng)實(shí)現(xiàn)流程圖
本系統(tǒng)按照軟件工程開(kāi)發(fā)理論,進(jìn)行了系統(tǒng)整體架構(gòu)設(shè)計(jì)和實(shí)際實(shí)施測(cè)試與開(kāi)發(fā),發(fā)現(xiàn)其滿(mǎn)足需求分析與要求,該軟件充分挖掘了用戶(hù)的需求并滿(mǎn)足用戶(hù)的使用體驗(yàn),且具有安全率高、運(yùn)行穩(wěn)定、故障率低等優(yōu)點(diǎn),但在防干擾和語(yǔ)音降噪方面還有所不足,識(shí)別率和執(zhí)行率還有待于加強(qiáng)。