語音播報概述
語音播報(Text to Speech,下文簡稱TTS),基于華為智慧引擎(HUAWEI HiAI Engine)中的語音播報引擎,向開發(fā)者提供人工智能應用層API。該技術(shù)提供將文本轉(zhuǎn)換為語音并進行播報的能力。
約束與限制
- 支持超長文本播報,最大文本長度為100000個字符。
- 語音播報不支持多線程調(diào)用。
語音播報開發(fā)
場景介紹
- 實時語音交互:生成音頻信息用于語音交互。
例如與智能音箱或手機智能助手的交互,后臺會將回答信息以音頻方式進行語音播報。
- 超長文本播報:用于小說、新聞等較長文本的自動朗讀。
接口說明
語音播報功能提供了TtsClient類實現(xiàn)文本轉(zhuǎn)語音功能,該類的主要接口如下表所示:
接口名 |
描述 |
---|---|
void create(Context context, TtsListener ttsListener) |
創(chuàng)建TTS客戶端。context為應用的上下文;ttsListener為TTS回調(diào),可以在TtsListener的onEvent方法中獲取創(chuàng)建結(jié)果(成功或失敗,可獲取的值詳見表2)。 只有在收到創(chuàng)建TTS客戶端成功回調(diào)之后,才能進行TTS客戶端的初始化。 |
void release() |
釋放正在使用的TTS引擎。調(diào)用此方法會將初始化狀態(tài)置為false,并結(jié)束播報任務,建議在init(TtsParams)前調(diào)用。 |
boolean init(TtsParams ttsParams) |
初始化TTS客戶端。設置deviceId、deviceType、語速、音量、音調(diào)、音色參數(shù),其中deviceId必須設置,否則初始化失敗。 |
boolean setParams(TtsParams ttsParams) |
設置參數(shù)。支持設置音量、音調(diào)、語速、音色四個參數(shù)的修改,修改其他值無效,在init(TtsParams)之后調(diào)用,否則設置不生效。 |
boolean setAudioType(AudioManager.AudioVolumeType audioType) |
設置音頻流類型。目前支持AudioVolumeType.STREAM_MUSIC等九種音頻流類型的設置,可在播報前調(diào)用。 |
void speakText(String text, String utteranceId) |
合成音頻并播報。傳入需播報的文本即可合成音頻并播報,支持的最大文本長度為512個字符,若文本超長或文本為空將會報錯,并將錯誤結(jié)果通過回調(diào)TtsListener的onError(String,String)方法傳給調(diào)用者。utteranceId為播報請求的唯一標識,若utteranceId為空,TTS引擎將為本次請求隨機生成utteranceId。 |
void speakLongText(String longText, String utteranceId) |
連續(xù)合成并播報超長文本。文本最大支持長度為100000,若文本超過最大支持長度或文本為空將會報錯,并將錯誤結(jié)果通過TtsListener的onError(String,String)方法傳給調(diào)用者。 |
boolean isSpeaking() |
判斷是否正在進行TTS播報。如果正在進行TTS播報,返回true;否則,返回false。 |
void stopSpeak() |
停止TTS播報。調(diào)用此方法停止播報后,若再次播報,將會從頭開始播報,而不是從停止處播報。 |
Optional<String> getVersion() |
獲取TTS SDK版本號。 |
void destroy() |
銷毀TTS客戶端。完成所有任務后,務必調(diào)用此方法銷毀TTS客戶端。 |
eventType取值 |
描述 |
---|---|
TtsEvent.CREATE_TTS_CLIENT_SUCCESS |
創(chuàng)建TTS客戶端成功。 |
TtsEvent.CREATE_TTS_CLIENT_FAILED |
創(chuàng)建TTS客戶端失敗。 |
TtsEvent.DESTROY_TTS_CLIENT_SUCCESS |
銷毀TTS客戶端成功。 |
TtsEvent.METHOD_EXECUTE_SUCCESS |
方法執(zhí)行成功或方法執(zhí)行無異常時,返回此事件類型。對應的方法可以通過pacMap.getIntValue(TtsClient.PAC_MAP_KEY_METHOD_ID)獲取。詳見表3 |
TtsEvent.METHOD_EXECUTE_FAILED_REMOTE_EXCEPTION |
方法執(zhí)行失敗或異常。對應的方法可以通過pacMap.getIntValue(TtsClient.PAC_MAP_KEY_METHOD_ID)獲取。詳見表3 |
TtsEvent.DESTROY_TTS_CLIENT_FAILED |
銷毀TTS客戶端失敗或未成功創(chuàng)建TTS客戶端時,調(diào)用destroy方法,返回此事件類型。 |
method Id |
方法 |
---|---|
TtsClient.METHOD_CREATE |
create |
TtsClient.METHOD_DESTROY |
destroy |
TtsClient.METHOD_RELEASE |
release |
TtsClient.METHOD_SPEAK_LONG_TEXT |
speakLongText |
TtsClient.METHOD_SPEAK_TEXT |
speakText |
TtsClient.METHOD_STOP_SPEAK |
stopSpeak |
開發(fā)步驟
導入相關(guān)的類。
import ohos.ai.tts.TtsClient; // TTS接口
import ohos.ai.tts.TtsListener; // TTS回調(diào)
import ohos.ai.tts.TtsParams; // TTS參數(shù)
import ohos.ai.tts.constants.TtsEvent; // TTS事件
import ohos.utils.PacMap; // TTS依賴
創(chuàng)建與TTS服務的連接。context為應用上下文信息,應為ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的實例或子類實例。
說明
以下代碼示例中Log.info()為各方法內(nèi)定義的處理方法舉例,已注釋。
private static final TtsListener ttsListener = new TtsListener() {
@Override
public void onEvent(int eventType, PacMap pacMap) {
// Log.info("onEvent:" + eventType);
if (eventType == TtsEvent.CREATE_TTS_CLIENT_SUCCESS) {
// Log.info("TTS Client create success");
}
}
@Override
public void onStart(String utteranceId) {
// Log.info(utteranceId + " audio synthesis begins");
}
@Override
public void onProgress(String utteranceId, byte[] audioData, int progress) {
// Log.info(utteranceId + " audio synthesis progress:" + progress);
}
@Override
public void onFinish(String utteranceId) {
// Log.info(utteranceId + " audio synthesis completed");
}
@Override
public void onSpeechStart(String utteranceId) {
// Log.info(utteranceId + " begins to speech");
}
@Override
public void onSpeechProgressChanged(String utteranceId, int progress) {
// Log.info(utteranceId + " speech progress:" + progress);
}
@Override
public void onSpeechFinish(String utteranceId) {
// Log.info(utteranceId + " speech completed");
}
@Override
public void onError(String utteranceId, String errorMessage) {
// Log.info(utteranceId + " errorMessage: " + errorMessage);
}
};
TtsClient.getInstance().create(context, ttsListener);
在TTS接口創(chuàng)建成功后初始化TTS引擎。
TtsParams ttsParams = new TtsParams();
ttsParams.setDeviceId("your device id");
boolean initResult = TtsClient.getInstance().init(ttsParams);
初始化TTS引擎成功后調(diào)用音頻轉(zhuǎn)換并播放接口。文章來源:http://www.zghlxwxcb.cn/news/detail-510267.html
if (initResult) {
TtsClient.getInstance().speakText("歡迎使用語音播報!", null);
}
使用完成后銷毀TTS客戶端。文章來源地址http://www.zghlxwxcb.cn/news/detail-510267.html
TtsClient.getInstance().destroy();
到了這里,關(guān)于HarmonyOS學習路之開發(fā)篇—AI功能開發(fā)(語音播報)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!