分类
前提
在讯飞开发者平台创建应用,获取Appid,下载SDK,复制jar和so文件,在Application中初始化
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SpeechUtility.createUtility(this, SpeechConstant.APPID +"=59892b71");
}
}
语音合成
SpeechSynthesizer
初始化语音合成对象
SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(this, mTtsInitListener);
初始化监听mTtsInitListener
:
private InitListener mTtsInitListener = new InitListener() {
@Override
public void onInit(int code) {
if (code != ErrorCode.SUCCESS) {
ToastUtil.showLongToast(context, "初始化失败,错误码:" + code);
} else {
// 初始化成功,之后可以调用startSpeaking方法
// 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,
// 正确的做法是将onCreate中的startSpeaking调用移至这里
}
}
};
开始合成:
int code = mTts.startSpeaking("科大讯飞,让世界聆听我们的声音", synthesizerListener);
mTtsListener:synthesizerListener
private SynthesizerListener synthesizerListener = new SynthesizerListener() {
@Override
public void onSpeakBegin() {
showTip("开始播放");
}
@Override
public void onSpeakPaused() {
showTip("暂停播放");
}
@Override
public void onSpeakResumed() {
showTip("继续播放");
}
@Override
public void onBufferProgress(int percent, int beginPos, int endPos,
String info) {
// 合成进度
showTip(String.format(getString(R.string.tts_toast_format), percent));
}
@Override
public void onSpeakProgress(int percent, int beginPos, int endPos) {
// 播放进度
}
@Override
public void onCompleted(SpeechError error) {
if (error == null) {
showTip("播放完成");
} else if (error != null) {
showTip(error.getPlainDescription(true));
}
}
@Override
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
// 若使用本地能力,会话id为null
// if (SpeechEvent.EVENT_SESSION_ID == eventType) {
// String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
// Log.d(TAG, "session id =" + sid);
// }
}
};
Demo:http://git.oschina.net/ThirdPartySDKSample/SpeechSynthesizer01