前言:
记录一下科大讯飞的文字转语音功能的sdk的集成过程,希望能够帮助到大家。
1. 登录官网,应用注册。
讯飞开放平台,进行简单的开发者注册。进入个人中心,注册应用。
注册完成后,我们可以看到自己的appid。选择自己要开通的功能,然后下载sdk。
2. 项目集成
官网下载的代码包含了lib,document,sample,(没有AS版本真的有点low)
将lib的so文件和jar放入你的项目中,
查看doc中的文档,
主要是箭头所指那个,有详细的介绍。
文字转语音的demo代码主要是:
3.项目代码
看看我的项目中是如何集成该代码的。
1.权限(自己看)
2.appid注册。
在application的初始化中进行注册(千万不能忘记)
SpeechUtility.createUtility(getApplicationContext(), SpeechConstant.APPID +"=appid");
3.工具类
public class VoiceUtils {
private static VoiceUtils mVoice;
public static VoiceUtils getInstance(){
synchronized (VoiceUtils.class){
if(null==mVoice){
mVoice=new VoiceUtils();
}
return mVoice;
}
}
// 语音合成对象
private SpeechSynthesizer mTts;
// 默认发音人
private String voicer = "xiaoyan";
//初始化监听器
private InitListener Listener;
//播放监听器
private SynthesizerListener mSynthesizerListener;
public void initmTts(Context context, final String msg){
if(null==Listener){
Listener=new InitListener() {
@Override
public void onInit(int code) {
if (code != ErrorCode.SUCCESS) {
} else {
// 初始化成功,之后可以调用startSpeaking方法
// 注:有的开发者在onCreate方法中创建完合成对象之后马上就调用startSpeaking进行合成,
// 正确的做法是将onCreate中的startSpeaking调用移至这里
mTts.startSpeaking(msg,mSynthesizerListener);
}
}
};
}
if(null==mSynthesizerListener){
mSynthesizerListener= new SynthesizerListener() {
@Override
public void onSpeakBegin() {
}
@Override
public void onBufferProgress(int i, int i1, int i2, String s) {
}
@Override
public void onSpeakPaused() {
}
@Override
public void onSpeakResumed() {
}
@Override
public void onSpeakProgress(int i, int i1, int i2) {
}
@Override
public void onCompleted(SpeechError speechError) {
}
@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {
}
};
}
if(null==mTts){
mTts=SpeechSynthesizer.createSynthesizer(context, Listener);
mTts.setParameter(SpeechConstant.VOICE_NAME,voicer);
mTts.setParameter(SpeechConstant.SPEED,"50");
mTts.setParameter(SpeechConstant.VOLUME,"80");
mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);
}else {
mTts.startSpeaking(msg,mSynthesizerListener);
}
}
}
单例很重要,不然只有第一次有用,mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);不能写成
mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_LOCAL);会出错。