1. 引言
你曾遇到過這種情況嗎?一本小說太長,要花很長時間閱讀,但如果有app能自動為你閱讀,就會省時很多。因此,將文本轉換成語音的工具應運而生。華為機器學習服務(HUAWEI ML Kit)具備語音合成(Text To Speech, TTS)功能,能讓app快速實現從文本到語音的轉換。TTS可以將文本轉換成人聲。這也可以通過默認方法實現,但這些方法不能提供自然或真實的聲音。TTS服務全球通用,利用深度神經網絡對文本進行處理,從而創造出自然的聲音,同時也支持多種音色,以增強人聲效果。TTS使用了雲服務,字符數限制在500個以內,並使用UTF-8編碼。
目前支持的音色如下:
- 英文-男聲
- 英文-女聲
- 中文-男聲
- 中文-女聲
- 英文+中文-男聲
- 英文+中文-女聲
2. 結果展示
視頻展示了使用該服務后得到的結果。
視頻鏈接:https://developer.huawei.com/consumer/cn/forum/topicview?fid=18&tid=0201314285827100291
3.集成步驟
步驟1: 在Android Studio中新建項目。
步驟2: 在app.gradle文件中添加依賴。
implementation 'com.huawei.hms:ml-computer-voice-tts:1.0.4.300'
步驟3: 在app.gradle文件頂部添加AppGallery Connect插件。
apply plugin: 'com.huawei.agconnect'
步驟4: 在Activity中創建回調。
var callback: MLTtsCallback = object : MLTtsCallback {
override fun onError(taskId: String, err: MLTtsError) {
}
override fun onWarn(taskId: String, warn: MLTtsWarn) {
}
override fun onRangeStart(taskId: String, start: Int, end: Int) {
}
override fun onEvent(taskId: String, eventName: Int, bundle: Bundle?) {
if (eventName == MLTtsConstants.EVENT_PLAY_STOP) {
val isStop = bundle?.getBoolean(MLTtsConstants.EVENT_PLAY_STOP_INTERRUPTED)
}
}
}
詳情如下:
共有4種回調方法:
- OnError():提示用戶發生什么錯誤,並通過華為分析服務(HUAWEI Analytics Kit)發送分析數據到控制台以進一步驗證。
- OnWarn():如果出現帶寬不足之類的警告,回調將在這里出現。
- OnRangeStart():返回當前播放的片段與文本的映射。
- OnEvent():當發生新事件時調用,例如,當音頻暫停時,您可以在bundle中獲得EVENT_PLAY_STOP_INTERRUPTED參數。
如果MLTtsConstants.EVENT_PLAY_STOP的值是false,則音頻播放無誤。
如果MLTtsConstants.EVENT_PLAY_STOP的值是true,則音頻會出現中斷。
步驟5: 對象初始化。
mlConfigs = MLTtsConfig()
.setLanguage(MLTtsConstants.TTS_EN_US)
.setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_EN)
.setSpeed(1.0f)
.setVolume(1.0f)
mlTtsEngine = MLTtsEngine(mlConfigs)
mlTtsEngine.setTtsCallback(callback)
詳情如下:
有兩種方法可用於創建TTS引擎。
我們通過MLTtsConfig對象使用自定義的TTS引擎:
- 通過MLTtsConstants.TTS_EN_US將語言設置為英文,也可以通過MLTtsConstants.TTS_ZH_HANS將語言設置為中文。
- 設置人聲。
英文女聲:MLTtsConstantsTTS_SPEAKER_FEMALE_EN
英文男聲:MLTtsConstants.TTS_SPEAKER_MALE_EN
中文女聲:MLTtsConstants.TTS_SPEAKER_FEMALE_ZH
中文男聲:MLTtsConstants.TTS_SPEAKER_MALE_ZH - 設置語速,范圍:0.2-1.8,1.0表示1倍語速。
- 設置音量,范圍:0.2-1.8,1.0表示1倍音量。
- 創建MLTtsEngine對象,並提供上述MLTtsConfig對象。
- 將上述創建的callback對象放入MLTtsEngine。
步驟6: 在Activity中添加以下方法,當用戶單擊按鈕時調用。
private fun startTtsService() {
val id = mlTtsEngine.speak(sourceText,MLTtsEngine.QUEUE_APPEND)
}
詳情如下:
sourceText為用戶輸入的文本。
- 當需要隊列系統時,使用MLTtsEngine.QUEUE_APPENDED。當TTS的第一次操作完成,緊接着進行下一次操作。
- 如果只需處理當前操作,使用MLTtsEngine.QUEUE_FLUSH。
- 通過onPause(),終止MLTtsEngine。
override fun onPause() {
super.onPause()
mlTtsEngine.stop()
}
- 通過onDestroy(),釋放MLTtsEngine占用的資源。
override fun onDestroy() {
super.onDestroy()
mlTtsEngine.shutdown()
}
4.常見問題
問:TTS服務只支持在華為設備上使用嗎?
答:是的。
問:需要上網才能使用TTS服務嗎?
答:是的,使用雲服務必須連接互聯網。
5.結束語
我們尚且在研究的初級階段。華為ML Kit提供的TTS服務適用於以下場景:新聞閱讀、有聲小說、股票信息播報、語音導航、視頻配音。
希望您喜歡這篇文章,也希望您可以分享使用該服務時的意見或建議。
你可以在Github下載源碼。
Github鏈接:https://github.com/HMS-Core/hms-ml-demo/tree/master/TTSSampleKotlin
原文鏈接:https://developer.huawei.com/consumer/cn/forum/topicview?fid=18&tid=0201314285827100291
原作者:夢陽
