参考百度语音合成demo,MiniActivity.java 抽离代码。
初始化
mSpeechSynthesizer放在Application中,并在Activity调用,但是无法正常播放。先贴出关键代码
Application初始化代码:
protectedStringappId="15151421";
protectedStringappKey="MxIQEHVeZg2222LNs3ygUYo1";
protectedStringsecretKey="t0F9gzpw1111AHkGdf8GM70zdOSnlrD";
privateTtsModettsMode=TtsMode.ONLINE;
publicSpeechSynthesizermSpeechSynthesizer;
privatevoidinitTTs(){
LoggerProxy.printable(true);//日志打印在logcat中
booleanisSuccess;
//日志更新在UI中,可以换成MessageListener,在logcat中查看日志
SpeechSynthesizerListenerlistener=newUiMessageListener(mainHandler);
//1.获取实例
mSpeechSynthesizer=SpeechSynthesizer.getInstance();
mSpeechSynthesizer.setContext(this);
//2.设置listener
mSpeechSynthesizer.setSpeechSynthesizerListener(listener);
//3.设置appId,appKey.secretKey
intresult=mSpeechSynthesizer.setAppId(appId);
result=mSpeechSynthesizer.setApiKey(appKey,secretKey);
//5.以下setParam参数选填。不填写则默认值生效
//设置在线发声音人:0普通女声(默认)1普通男声2特别男声3情感男声4情感儿童声
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER,"0");
//设置合成的音量,0-9,默认5
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_VOLUME,"9");
//设置合成的语速,0-9,默认5
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEED,"5");
//设置合成的语调,0-9,默认5
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_PITCH,"5");
mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_MIX_MODE,SpeechSynthesizer.MIX_MODE_DEFAULT);
//该参数设置为TtsMode.MIX生效。即纯在线模式不生效。
//MIX_MODE_DEFAULT默认,wifi状态下使用在线,非wifi离线。在线状态下,请求超时6s自动转离线
//MIX_MODE_HIGH_SPEED_SYNTHESIZE_WIFIwifi状态下使用在线,非wifi离线。在线状态下,请求超时1.2s自动转离线
//MIX_MODE_HIGH_SPEED_NETWORK,3G4Gwifi状态下使用在线,其它状态离线。在线状态下,请求超时1.2s自动转离线
//MIX_MODE_HIGH_SPEED_SYNTHESIZE,2G3G4Gwifi状态下使用在线,其它状态离线。在线状态下,请求超时1.2s自动转离线
mSpeechSynthesizer.setAudioStreamType(AudioManager.MODE_IN_CALL);
//x.额外:自动so文件是否复制正确及上面设置的参数
Mapparams=newHashMap<>();
//复制下上面的mSpeechSynthesizer.setParam参数
//上线时请删除AutoCheck的调用
InitConfiginitConfig=newInitConfig(appId,appKey,secretKey,ttsMode,params,listener);
AutoCheck.getInstance(this.getApplicationContext()).check(initConfig,newHandler(){
@Override
/**
*开新线程检查,成功后回调
*/
publicvoidhandleMessage(Messagemsg){
if(msg.what==100){
AutoCheckautoCheck=(AutoCheck)msg.obj;
synchronized(autoCheck){
Stringmessage=autoCheck.obtainDebugMessage();
print(message);
}
}
}
});
//6.初始化
result=mSpeechSynthesizer.initTts(ttsMode);
checkResult(result,"initTts");
}
并在onCreate()中初始化。
并在Activity调用
privateSpeechSynthesizermSpeechSynthesizer;
application=MainApplication.getInstance();
mSpeechSynthesizer=application.mSpeechSynthesizer;
intresult=mSpeechSynthesizer.speak(text);
调用正常,但是无法正常播放音频,求解。个人怀疑是UI阻塞,这个如何解决