語音合成是實作人機語音互動,建立一個有聽和講能力的互動系統所必需的關鍵技術。随着語音技術的發展,百度自主研發了語音合成系統(TTS),功能是接受使用者發送的文本,生成語音發送給使用者。
這篇文章将介紹如何使用百度Android語音合成SDK。
與語音識别SDK類似,使用語音合成SDK也需要注冊,并開啟語音合成API服務,詳細步驟可以參考 點選打開連結 中的注冊部分。
百度語音合成SDK以JAR包+動态連結庫形式釋出,需要開發者在 點選打開連結 下載下傳SDK開發包,并将libs檔案夾拷貝到工程中
申請必要的權限
初始化SpeechSynthesizer對象
speechSynthesizer = new SpeechSynthesizer(getApplicationContext(),
"holder", this);
// 此處需要将setApiKey方法的兩個參數替換為你在百度開發者中心注冊應用所得到的apiKey和secretKey
speechSynthesizer.setApiKey("your-apiKey", "your-secretKey");
參數設定
private void setParams() {
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME, "5");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED, "5");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_PITCH, "5");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUDIO_ENCODE, "1");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUDIO_RATE, "4");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_LANGUAGE, "ZH");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_NUM_PRON, "0");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_ENG_PRON, "0");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_PUNC, "0");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_BACKGROUND, "0");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_STYLE, "0");
speechSynthesizer.setParam(SpeechSynthesizer.PARAM_TERRITORY, "0");
}不需要實作這麼多參數,具體參數的含義可以參看SDK的使用文檔和參數設定。
如果需要對音頻播報的音頻流進行設定,可以調用如下接口
speechSynthesizer.setAudioStreamType(AudioManager.STREAM_MUSIC);以上内容即可以實作語音合成的操作,識别過程中可以使用SpeechSynthesizerListener來監聽狀态,進而更好的實作界面同步。
class listener implements SpeechSynthesizerListener {
@Override
public void onStartWorking(SpeechSynthesizer synthesizer) {
logDebug("開始工作,請等待資料...");
}
@Override
public void onSpeechStart(SpeechSynthesizer synthesizer) {
logDebug("朗讀開始");
}
@Override
public void onSpeechResume(SpeechSynthesizer synthesizer) {
logDebug("朗讀繼續");
}
@Override
public void onSpeechProgressChanged(SpeechSynthesizer synthesizer, int progress) {
}
@Override
public void onSpeechPause(SpeechSynthesizer synthesizer) {
logDebug("朗讀已暫停");
}
@Override
public void onSpeechFinish(SpeechSynthesizer synthesizer) {
logDebug("朗讀已停止");
}
@Override
public void onNewDataArrive(SpeechSynthesizer synthesizer, byte[] dataBuffer, int dataLength) {
logDebug("新的音頻資料:" + dataLength);
}
@Override
public void onError(SpeechSynthesizer synthesizer, SpeechError error) {
logError("發生錯誤:" + error.errorDescription + "(" + error.errorCode + ")");
}
@Override
public void onCancel(SpeechSynthesizer synthesizer) {
logDebug("已取消");
}
@Override
public void onBufferProgressChanged(SpeechSynthesizer synthesizer, int progress) {
}
}