门户网站建设汇报,首页公司,小程序流量点击推广平台,云南省工程建设造价协会网站原文#xff1a;http://blog.csdn.net/monkeyduck/article/details/24302655 在科大讯飞语音包的Mscdemo中它的方法都是写在Activity中的#xff0c;这样其实并不是很好#xff0c;因为Activity只是负责UI交互的#xff0c;如果项目很简单自然可以#xff0c;但是一旦比较… 原文http://blog.csdn.net/monkeyduck/article/details/24302655 在科大讯飞语音包的Mscdemo中它的方法都是写在Activity中的这样其实并不是很好因为Activity只是负责UI交互的如果项目很简单自然可以但是一旦比较复杂肯定要自己定义很多包很多类但是写在Activity中的方法就不能被自己定义的类调用了咋办尼那就把方法写在自己的类里就行了。准备工作把Msc.jar包和libmsc.so拷贝到自己工程的libs目录下这样才能用它的方法和类。libmsc.so一定要用自己Id下载的包因为这个包和你的那个appid是绑定的拷贝别人的是不行的会有用户校验失败的错误我就困扰了很久很久。。。 以语音合成方法为例我在自己的应用程序中需要调用它的合成函数所以在自己的类里调用了它的synthetizeInSilence()方法。如下 [java] view plaincopy /** * 使用SpeechSynthesizer合成语音不弹出合成Dialog. * param */ private void synthetizeInSilence() { if (null mSpeechSynthesizer) { //创建合成对象. mSpeechSynthesizer SpeechSynthesizer.createSynthesizer(this); } //设置合成发音人. String role mSharedPreferences.getString( getString(R.string.preference_key_tts_role), getString(R.string.preference_default_tts_role)); //设置发音人 mSpeechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, role); //获取语速 int speed mSharedPreferences.getInt( getString(R.string.preference_key_tts_speed), 50); //设置语速 mSpeechSynthesizer.setParameter(SpeechConstant.SPEED, speed); //获取音量. int volume mSharedPreferences.getInt( getString(R.string.preference_key_tts_volume), 50); //设置音量 mSpeechSynthesizer.setParameter(SpeechConstant.VOLUME, volume); //获取语调 int pitch mSharedPreferences.getInt( getString(R.string.preference_key_tts_pitch), 50); //设置语调 mSpeechSynthesizer.setParameter(SpeechConstant.PITCH, pitch); //获取合成文本. Editable editable mSourceText.getText(); String source null; if (null ! editable) { source editable.toString(); } //进行语音合成. mSpeechSynthesizer.startSpeaking(source, this); showTip(String.format(getString(R.string.tts_toast_format),0 ,0)); } 这里会遇到几个问题一个是SpeechSynthesizer.createSynthesizer(this)方法中的this源程序是指Activity对象因为这个参数要求是Context即上下文对象在Activity里可以写this在自己类里写this就成指代类对象自然报错了。解决办法是将自己的类继承Application可以用getApplicationContext()方法获取Context对象。第二个错误就是mSharedPreferences这里是定义很多参数可有可无不定义就用默认值想定义就直接调用setParameter就可以了在这偷个懒就用其默认值了修改后的类书写如下。 [java] view plaincopy package dmcore.outputs; import android.app.Application; import android.content.Context; import com.iflytek.cloud.speech.SpeechError; import com.iflytek.cloud.speech.SpeechSynthesizer; import com.iflytek.cloud.speech.SynthesizerListener; public class MyOutput extends Application implements SynthesizerListener{ //缓存对象. //private SharedPreferences mSharedPreferences; //合成对象. private SpeechSynthesizer mSpeechSynthesizer; private static Context context; public void onCreate() { super.onCreate(); MyOutput.context getApplicationContext(); } public static Context getAppContext() { return MyOutput.context; } //------------------------------------------------------------------------- // Constructor //------------------------------------------------------------------------- public MyOutput(){ } public void SetParameter(){ if (mSpeechSynthesizer null) { //创建合成对象. mSpeechSynthesizer SpeechSynthesizer.createSynthesizer(context); } /*//设置合成发音人. String role mSharedPreferences.getString( getString(R.string.preference_key_tts_role), getString(R.string.preference_default_tts_role)); //设置发音人 mSpeechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, role); //获取语速 int speed mSharedPreferences.getInt( getString(R.string.preference_key_tts_speed), 50); //设置语速 mSpeechSynthesizer.setParameter(SpeechConstant.SPEED, speed); //获取音量. int volume mSharedPreferences.getInt( getString(R.string.preference_key_tts_volume), 50); //设置音量 mSpeechSynthesizer.setParameter(SpeechConstant.VOLUME, volume); //获取语调 int pitch mSharedPreferences.getInt( getString(R.string.preference_key_tts_pitch), 50); //设置语调 mSpeechSynthesizer.setParameter(SpeechConstant.PITCH, pitch);*/ } /** * 使用SpeechSynthesizer合成语音不弹出合成Dialog. * param */ public void synthetizeInSilence(String SourceText) { //进行语音合成. mSpeechSynthesizer.startSpeaking(SourceText, this); } Override public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) { // TODO Auto-generated method stub } Override public void onCompleted(SpeechError arg0) { // TODO Auto-generated method stub } Override public void onSpeakBegin() { // TODO Auto-generated method stub } Override public void onSpeakPaused() { // TODO Auto-generated method stub } Override public void onSpeakProgress(int arg0, int arg1, int arg2) { // TODO Auto-generated method stub } Override public void onSpeakResumed() { // TODO Auto-generated method stub } } 注意还没完要到Manifest.xml文件的application标签里加上你的类的位置我的是android:namedmcore.outputs.MyOutput当然还要加上那些uses-permission如下uses-permissionandroid:nameandroid.permission.RECORD_AUDIO /uses-permissionandroid:nameandroid.permission.INTERNET /uses-permissionandroid:nameandroid.permission.ACCESS_NETWORK_STATE /uses-permissionandroid:nameandroid.permission.ACCESS_WIFI_STATE /uses-permissionandroid:nameandroid.permission.CHANGE_NETWORK_STATE /uses-permissionandroid:nameandroid.permission.READ_PHONE_STATE /uses-permission android:nameandroid.permission.WRITE_EXTERNAL_STORAGE /uses-permission android:nameandroid.permission.READ_CONTACTS/主函数中先创建MyOutput对象再调用SetParameter方法再调用synthetizeInSilence()方法参数传入你想输出的话大功告成 转载于:https://www.cnblogs.com/tc310/p/3995972.html