private SpeechSynthesizer mTts;
新增一个初始化语音合成对象的监听。
/**
- 初始化监听。
*/
private InitListener mTtsInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.i(TAG, "InitListener init() code = " + code);
if (code != ErrorCode.SUCCESS) {
showTip(“初始化失败,错误码:” + code);
} else {
showTip(“初始化成功”);
}
}
};
再增加一个showTip方法
/**
-
Toast提示
-
@param msg
*/
private void showTip(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
然后在onCreate中写入如下代码
// 初始化合成对象
mTts = SpeechSynthesizer.createSynthesizer(this, mTtsInitListener);
在onClick中,点击按钮之前先判断一下是否不为空,避免程序空指针崩溃。
if (mTts == null) {
this.showTip(“创建对象失败,请确认 libmsc.so 放置正确,且有调用 createUtility 进行初始化”);
return;
}
④ 参数设置
设置发音人和引擎类型
// 默认发音人
private String voicer = “xiaoyan”;
// 引擎类型
private String mEngineType = SpeechConstant.TYPE_CLOUD;
然后新增一个setParam()方法
/**
-
参数设置
-
@return
*/
private void setParam() {
// 清空参数
mTts.setParameter(SpeechConstant.PARAMS, null);
// 根据合成引擎设置相应参数
if (mEngineType.equals(SpeechConstant.TYPE_CLOUD)) {
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
//支持实时音频返回,仅在synthesizeToUri条件下支持
mTts.setParameter(SpeechConstant.TTS_DATA_NOTIFY, “1”);
// 设置在线合成发音人
mTts.setParameter(SpeechConstant.VOICE_NAME, voicer);
} else {
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
mTts.setParameter(SpeechConstant.VOICE_NAME, “”);
}
// 设置播放合成音频打断音乐播放,默认为true
mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, “false”);
// 设置音频保存路径,保存音频格式支持pcm、wav
mTts.setParameter(SpeechConstant.AUDIO_FORMAT, “pcm”);
mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, getExternalFilesDir(null) + “/msc/tts.pcm”);
}
⑤ 语音合成监听
语音合成是需要设置资源的,如下所以,可以设置一个默认的,当然了布局中有一个输入框,在你不输入的时候就使用这个默认值。
//播放的文字
String text = “富强、明主、文明、和谐、自由、平等、公正、法制、爱国、敬业、诚信、友善。”;
然后创建一个语音合成的监听
/**
- 合成回调监听。
*/
private SynthesizerListener mTtsListener = new SynthesizerListener() {
//开始播放
@Override
public void onSpeakBegin() {
}
//暂停播放
@Override
public void onSpeakPaused() {
}
//继续播放
@Override
public void onSpeakResumed() {
}
//合成进度
@Override
public void onBufferProgress(int percent, int beginPos, int endPos, String info) {
}
//播放进度
@Override
public void onSpeakProgress(int percent, int beginPos, int endPos) {
}
//播放完成
@Override
public void onCompleted(SpeechError error) {
}
//事件
@Override
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
}
};
这里重写了七个方法,下面一个一个来。
首先是onSpeakBegin,里面就打印一句话就可以了。
//开始播放
@Override
public void onSpeakBegin() {
Log.i(TAG, “开始播放”);
}
onSpeakPaused
//暂停播放
@Override
public void onSpeakPaused() {