語音合成是實現(xiàn)人機語音交互,,建立一個有聽和講能力的交互系統(tǒng)所必需的關鍵技術,。
這篇文章將介紹如何使用百度Android語音合成SDK,。
與語音識別SDK類似,使用語音合成SDK也需要注冊,,并開啟語音合成API服務,,詳細步驟可以參考 點擊打開鏈接 中的注冊部分。
百度語音合成SDK以JAR包+動態(tài)鏈接庫形式發(fā)布,,需要開發(fā)者在 點擊打開鏈接 下載SDK開發(fā)包,,并將libs文件夾拷貝到工程中
申請必要的權限
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 初始化SpeechSynthesizer對象 speechSynthesizer = new SpeechSynthesizer(getApplicationContext(), "holder", this); // 此處需要將setApiKey方法的兩個參數(shù)替換為你在百度開發(fā)者中心注冊應用所得到的apiKey和secretKey speechSynthesizer.setApiKey("your-apiKey", "your-secretKey"); 參數(shù)設置
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"); }不需要實現(xiàn)這么多參數(shù),具體參數(shù)的含義可以參看SDK的使用文檔和參數(shù)設置,。 如果需要對音頻播報的音頻流進行設置,,可以調(diào)用如下接口
speechSynthesizer.setAudioStreamType(AudioManager.STREAM_MUSIC);以上內(nèi)容即可以實現(xiàn)語音合成的操作,識別過程中可以使用SpeechSynthesizerListener來監(jiān)聽狀態(tài),,從而更好的實現(xiàn)界面同步,。 class listener implements SpeechSynthesizerListener { @Override public void onStartWorking(SpeechSynthesizer synthesizer) { logDebug("開始工作,請等待數(shù)據(jù)..."); } @Override public void onSpeechStart(SpeechSynthesizer synthesizer) { logDebug("朗讀開始"); } @Override public void onSpeechResume(SpeechSynthesizer synthesizer) { logDebug("朗讀繼續(xù)"); } @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("新的音頻數(shù)據(jù):" + dataLength); } @Override public void onError(SpeechSynthesizer synthesizer, SpeechError error) { logError("發(fā)生錯誤:" + error.errorDescription + "(" + error.errorCode + ")"); } @Override public void onCancel(SpeechSynthesizer synthesizer) { logDebug("已取消"); } @Override public void onBufferProgressChanged(SpeechSynthesizer synthesizer, int progress) { } } |
|