记录一下科大讯飞的文字转语音功能的sdk的集成过程,希望能够帮助到大家。
讯飞开放平台,进行简单的开发者注册。进入个人中心,注册应用。 注册完成后,我们可以看到自己的appid。选择自己要开通的功能,然后下载sdk。
官网下载的代码包含了lib,document,sample,(没有AS版本真的有点low) 将lib的so文件和jar放入你的项目中,
查看doc中的文档,
主要是箭头所指那个,有详细的介绍。 文字转语音的demo代码主要是:
看看我的项目中是如何集成该代码的。
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);会出错。