在Android开发中,语音播报经常使用,但是,在使用过程中会发现,如果语音来源过于块,频率过高,在前一条没有播放完的情况下会执行第二条播放,本篇文章用来解决这个问题。
一、科大讯飞语音集成:
1、在科大讯飞的开发者平台(科大讯飞开放平台)注册。我这里使用的是在线语音合成,下载SDK包。
2、将SDK包里面的libs里面的.so文件和jar包复制到你的项目中,并且引用.so文件和jar包,这里要注意的是,个人建议将所有CPU类型的.so文件都放到你的项目中,这样保证在所有设备中都能播放,虽然这样会导致项目变大。
3、在MyApplication中初始化:
SpeechUtility.createUtility(this, SpeechConstant.APPID + "=******");
注意这里的APPID,不要丢了这个“=”号。
4、在使用到语音播放的地方,初始化语音引擎:
private SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(context, mTtsInitListener);
5、初始化中有两个参数,第一个是上下文,第二个是初始化回调:
private InitListener mTtsInitListener = new InitListener() {
@Override
public void onInit(int code) {
if (code != ErrorCode.SUCCESS) {
Toast.showToast(context, "语音初始化失败,错误码:" + code);
} else {
AppLog.i("语音初始化成功");
// 初始化成功,之后可以调用startSpeaking方法
// 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,
// 正确的做法是将onCreate中的startSpeaking调用移至这里
}
}
};
6、播放:
public void playVoice(String msg) {
mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
mTts.s