Android TTS API筆記

寫(xiě)在前面


今日應(yīng)內(nèi)部團(tuán)隊(duì)需求,要實(shí)時(shí)朗讀語(yǔ)音。在這個(gè)場(chǎng)景驅(qū)動(dòng),快速過(guò)了一遍官方文檔。通過(guò)此筆記,摘錄自己的思考和理解的內(nèi)容,方便日后快速回憶。
所以說(shuō)這是一個(gè)偏個(gè)人的筆記,對(duì)于需要全面了解TTS的看官,可能要失望了。

「android.speech」和「android.speech.tts」


「android.speech」包不在我這次要了解的范圍內(nèi),后續(xù)會(huì)補(bǔ)上相關(guān)筆記。

「android.speech.tts」包的tts是「Text To Speech」縮寫(xiě),文字轉(zhuǎn)語(yǔ)音。

為了開(kāi)發(fā)者便于使用,在AOSP中,關(guān)于「兼容性定義文檔」的說(shuō)明,要求每個(gè)Android OS版本發(fā)行都要兼容的功能實(shí)現(xiàn),其中「TTS」就是以一個(gè)Framework的形式存在,開(kāi)發(fā)者通過(guò)已有的API,與這個(gè)Framework服務(wù)進(jìn)行交互動(dòng)作。

以一個(gè)簡(jiǎn)單的使用常見(jiàn)為例:播放一句話,簡(jiǎn)單列出涉及到的相關(guān)API。

  • 創(chuàng)建TextToSpeech實(shí)例mTts,API會(huì)調(diào)用喚起Framework并進(jìn)行一系列初始化,未初始化完成是用不了的,所以要OnInitListener監(jiān)聽(tīng)回調(diào)。
  • 回調(diào)的結(jié)果要么是 TextToSpeech.Engine.SUCCESS要么是TextToSpeech.Engine.ERROR。
  • 成功后,可以對(duì)mTts進(jìn)行配置。
  • 設(shè)置當(dāng)前要識(shí)別合成的語(yǔ)言,使用voicelanguage是已經(jīng)deprecated。
  • 設(shè)置語(yǔ)速speechRate, 正常速度為1.0f,2.0f是2倍速,0.5是慢1倍速。
  • 設(shè)置音調(diào)pitch,正常調(diào)為1.0f,跟語(yǔ)速的值規(guī)則類似
  • 添加每次speak方法的識(shí)別回調(diào)UtteranceProgressListener接口的實(shí)現(xiàn)
  • 調(diào)用speak()方法
    • text要朗讀的文本內(nèi)容
    • queueMode隊(duì)列模式有TextToSpeech.QUEUE_ADD
    • bundle,設(shè)置三個(gè)值:
      -使用哪種系統(tǒng)的媒體音類型的音量,取值為AudioManagerSTREAM_前綴的常量及
      -本次播放使用的音量大小,取值0-1,即0%-100%
      -KEY_PARAM_PAN,不是很理解是英文說(shuō)的是什么,取值
    • utteranceId暫未遇到使用場(chǎng)景;
      TextToSpeech.QUEUE_FLUSH,這個(gè)場(chǎng)景應(yīng)該比較常見(jiàn):自動(dòng)順序朗讀段落,用戶突然點(diǎn)擊重放,由頭重新朗讀,則使用QUEUE_FLUSH值。

上述是一次理想的流程,在實(shí)際場(chǎng)景中,可能會(huì)遇到各種情況,例如文字識(shí)別失敗、網(wǎng)絡(luò)識(shí)別的網(wǎng)絡(luò)失敗、framework服務(wù)內(nèi)部失敗、音頻流輸出失敗等情況,API都有相關(guān)的常量值可供識(shí)別使用。

另外TextToSpeech.Engine類,不是一個(gè)真正的“引擎”,它只定義了與Framework交互使用到常量:Activity Action、Broadcast Action、Intent、Bundle Key值等,所以這個(gè)命名一度令我不知所措。
Framework本身還支持開(kāi)發(fā)者通過(guò)ACTION,調(diào)用:檢查是否可用的語(yǔ)言包、是否有Framework存在、檢查目標(biāo)語(yǔ)言的語(yǔ)言包是否已安裝、發(fā)起安裝語(yǔ)言包指令。

后記


通過(guò)簡(jiǎn)單的封裝,配合WebView的Js Interface,讓H5前端項(xiàng)目的同事能調(diào)用Android的TTS進(jìn)行朗讀。然而事情沒(méi)有那么簡(jiǎn)單,因?yàn)槭褂玫脑O(shè)備是小米電視4,根本就沒(méi)有TTS Framework,只能使用第三方語(yǔ)音識(shí)別SDK解決,例如科大訊飛的。
Anyway,借機(jī)了解這塊API,也是有所收獲。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容