关闭

Android 语音合成(使用科大讯飞sdk)

4908人阅读 评论(3) 收藏 举报
分类:

转自:http://blog.csdn.net/bufanni12/article/details/29574467

最近需要使用到语音播报的功能,在百度七武器百度语音和科大讯飞的语音当中考虑到准确性和专业性,选择了科大讯飞。科大讯飞所提供的Android开发sdk有两种一种是集成了自身产品语音+的sdk,功能比较强大但是会初始化语音服务模块;另一种是纯开发sdk不集成产品只需要导入相应jar包就可以使用。考虑到只用到了语音合成的技术所以选择了第二种sdk。

ps:要不是他sdk的官方文档写的太差了,也不会写这篇东西。

1,首先需要的jar包,一个是Msc.jar和libmsc.so文件(需要放到armeabi文件夹当中)。在官网中可以下载。

2,在AndroidManifest文件当中填写需要的权限。

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <uses-permission android:name="android.permission.RECORD_AUDIO" />  
  2. <uses-permission android:name="android.permission.INTERNET" />  
  3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  5. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />  
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
3,在混淆打包的时候需要添加-keep class com.iflytek.**{*;},

4,在代码当中的使用:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.tts.demo;  
  2.   
  3. import com.iflytek.cloud.ErrorCode;  
  4. import com.iflytek.cloud.InitListener;  
  5. import com.iflytek.cloud.SpeechConstant;  
  6. import com.iflytek.cloud.SpeechError;  
  7. import com.iflytek.cloud.SpeechSynthesizer;  
  8. import com.iflytek.cloud.SpeechUtility;  
  9. import com.iflytek.cloud.SynthesizerListener;  
  10.   
  11. import android.os.Bundle;  
  12. import android.app.Activity;  
  13. import android.util.Log;  
  14. import android.view.Menu;  
  15. import android.view.View;  
  16. import android.view.View.OnClickListener;  
  17. import android.widget.Button;  
  18.   
  19. public class MainActivity extends Activity implements OnClickListener{  
  20.       
  21.     private SpeechSynthesizer mySynthesizer;  
  22.       
  23.     private Button tts_Button;  
  24.   
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.activity_main);  
  29.           
  30.         tts_Button = (Button) findViewById(R.id.tts_button);  
  31.         tts_Button.setOnClickListener(this);  
  32.         /*  
  33.         在使用语音平台上传应用包的时候会自定生成一个appid   应该使用与包相对应的appid在申请提交后没有使用次数的限制  
  34.           
  35.         */  
  36.         //语音初始化,在使用应用使用时需要初始化一次就好,如果没有这句会出现10111初始化失败  
  37.         SpeechUtility.createUtility(MainActivity.this, "appid=51e8ae25");  
  38.         //处理语音合成关键类  
  39.         mySynthesizer = SpeechSynthesizer.createSynthesizer(this, myInitListener);  
  40.     }  
  41.   
  42.     private InitListener myInitListener = new InitListener() {  
  43.         @Override  
  44.         public void onInit(int code) {  
  45.             Log.d("mySynthesiezer:", "InitListener init() code = " + code);  
  46.         }  
  47.     };  
  48.   
  49.     @Override  
  50.     public void onClick(View v) {  
  51.         // TODO Auto-generated method stub  
  52.         switch (v.getId()){  
  53.         case R.id.tts_button:  
  54.             //设置发音人  
  55.             mySynthesizer.setParameter(SpeechConstant.VOICE_NAME,"xiaoyan");  
  56.             //设置音调  
  57.             mySynthesizer.setParameter(SpeechConstant.PITCH,"50");  
  58.             //设置音量  
  59.             mySynthesizer.setParameter(SpeechConstant.VOLUME,"50");  
  60.             int code = mySynthesizer.startSpeaking("欢迎使用语音导航!", mTtsListener);  
  61.             Log.d("mySynthesiezer start code:", code+"");  
  62.             break;  
  63.         default:  
  64.             break;  
  65.         }  
  66.     }  
  67.       
  68.       
  69.     private SynthesizerListener mTtsListener = new SynthesizerListener() {  
  70.         @Override  
  71.         public void onSpeakBegin() {  
  72.         }   
  73.         @Override  
  74.         public void onSpeakPaused() {  
  75.         }  
  76.         @Override  
  77.         public void onSpeakResumed() {  
  78.         }  
  79.         @Override  
  80.         public void onBufferProgress(int percent, int beginPos, int endPos,  
  81.                 String info) {  
  82.         }  
  83.         @Override  
  84.         public void onSpeakProgress(int percent, int beginPos, int endPos) {  
  85.         }  
  86.   
  87.         @Override  
  88.         public void onCompleted(SpeechError error) {  
  89.             if(error!=null)  
  90.             {  
  91.                 Log.d("mySynthesiezer complete code:", error.getErrorCode()+"");  
  92.             }  
  93.             else  
  94.             {  
  95.                 Log.d("mySynthesiezer complete code:", "0");  
  96.             }  
  97.         }  
  98.     };  
  99.   
  100. }  

1
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4675786次
    • 积分:35773
    • 等级:
    • 排名:第130名
    • 原创:21篇
    • 转载:1096篇
    • 译文:0篇
    • 评论:486条
    文章分类
    最新评论