当前位置:   article > 正文

【Android语音】讯飞语音合成_讯飞 com.iflytek.cloud.speech.speecherror: null

讯飞 com.iflytek.cloud.speech.speecherror: null

  1. 创建讯飞应用:在讯飞开发平台注册账号,在网站上创建应用,得到一个APPID,这个ID用来绑定讯飞SDK和自己制作的APP

  2. 创建SDK:选择所需服务(如语言听写)、平台(Android)、和应用(第一步创建的应用),然后下载该SDK。SDK主要有三个文件夹,/assets,/libs,/sample.

  3. 创建android Studio项目:新建项目,修改项目名(如VoiceDemo)后其余都为默认,创建一个helloworld项目,文件浏览方式默认为Android,改为Project方式。

  4. 复制.jar文件:将SDK中/libs文件夹中的.jar文件都复制到android项目VoiceDemo/app/libs/文件夹下。可能由于生成SDK时只选择语言听写,只有两个.jar文件(分别为Msc.jar,Sunflower.jar)

  5. 复制.so文件:先在android项目VoiceDemo/app/src/main/下新建文件夹/jniLibs,将SDK中/libs下的包含.so文件夹全部复制到VoiceDemo/app/src/main/jniLibs/文件夹下。总共七个文件夹分别是/arm64-v8a,/armeabi,/armeabi-v7a,/mips,/mips64,/x86,/86_64,每个文件夹下都只有一个名为libmsc.so的文件

  6. 复制/assets文件夹:将SDK中/assets文件夹复制到VoiceDemo/app/src/main/

  7. 刷新.gradle文件:选中VoiceDemo/app下的build.gradle,右键选择Synchronize 'build.gradle',依次刷新其它两个.gradle文件。工具栏中也有Synch Project with Gradle Files*可能达到同样效果。在这一步中.gradle中没有出现文章二中的代码,我也没有手动添加,但好像影响不大。初次接触Android编程,不懂原理,希望热心人解答。

  8. 编辑权限:在*VoiceDemo/app/src/main/AndroidManifest.xml文件中依照第二篇文章代码添加相应权限;

  9. 编辑布局:在*VoiceDemo/app/src/main/res/layout/activity_main.xml文件中依照第二篇文章添加按钮和文本框

权限配置:

  1. <uses-permission android:name="android.permission.INTERNET" />
  2. <uses-permission android:name="android.permission.RECORD_AUDIO" />
  3. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  4. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  5. <!--读取网络信息状态 -->
  6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  7. <!--获取当前wifi状态 -->
  8. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  9. <!--允许程序改变网络连接状态 -->
  10. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
  11. <!--读取手机信息权限 -->
  12. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  13. <uses-permission android:name="android.permission.WRITE_SETTINGS" />

初始化:

创建语音配置对象,只有初始化后才能使用MSC的各项服务,

一般在程序入口,(Application,Activity的onCreate方法中)

  1. SpeechUtility.createUtility(context, SpeechConstant.APPID +"=59f05070");
  2. //=后面这里要替换成自己申请的 AppID

语音合成:


  1. package com.itheima.xunfeidemo;
  2. import android.app.Activity;
  3. import android.util.Log;
  4. import com.iflytek.cloud.SpeechConstant;
  5. import com.iflytek.cloud.SpeechSynthesizer;
  6. import com.iflytek.cloud.SpeechUtility;
  7. /**
  8. * Created by lenovo on 2018/4/7.
  9. */
  10. public class Speek {
  11. protected SpeechSynthesizer mTts;
  12. private Activity activity;
  13. private static final String TAG = "Speek";
  14. public Speek(Activity activity){
  15. this.activity=activity;
  16. initTTs();
  17. }
  18. public void Speeking(String text)
  19. {
  20. //3.开始合成
  21. mTts.startSpeaking(text, null);
  22. }
  23. public void initTTs()
  24. {
  25. // 将“12345678”替换成您申请的 APPID,申请地址: http://www.xfyun.cn
  26. // 请勿在“ =”与 appid 之间添加任务空字符或者转义符 初始化SDK
  27. SpeechUtility.createUtility(activity, SpeechConstant.APPID +"=5ac39c04");
  28. //1.创建 SpeechSynthesizer 对象, 第二个参数: 本地合成时传 InitListener
  29. mTts= SpeechSynthesizer.createSynthesizer(activity, mSynListener);
  30. //2.合成参数设置,详见《 MSC Reference Manual》 SpeechSynthesizer 类
  31. //设置发音人(更多在线发音人,用户可参见 附录13.2
  32. mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); //设置发音人
  33. mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速
  34. mTts.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围 0~100
  35. mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端
  36. //设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm”
  37. //保存在 SD 卡需要在 AndroidManifest.xml 添加写 SD 卡权限//仅支持保存为 pcm 和 wav 格式, 如果不需要保存合成音频,注释该行代码
  38. mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");
  39. }
  40.      //合成监听器
  41.     private SynthesizerListener mSynListener = new SynthesizerListener() {
  42.         //会话结束回调接口,没有错误时,error为null
  43.         public void onCompleted(SpeechError error) {
  44.         }
  45.         //缓冲进度回调
  46.         //percent为缓冲进度0~100,beginPos为缓冲音频在文本中开始位置,endPos表示缓冲音频在文本中结束位置,info为附加信息。
  47.         public void onBufferProgress(int percent, int beginPos, int endPos, String info) {
  48.         }
  49.         //开始播放
  50.         public void onSpeakBegin() {
  51.         }
  52.         //暂停播放
  53.         public void onSpeakPaused() {
  54.         }
  55.         //播放进度回调
  56.         //percent为播放进度0~100,beginPos为播放音频在文本中开始位置,endPos表示播放音频在文本中结束位置.
  57.         public void onSpeakProgress(int percent, int beginPos, int endPos) {
  58.         }
  59.         //恢复播放回调接口
  60.         public void onSpeakResumed() {
  61.         }
  62.         //会话事件回调接口
  63.         public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
  64.         }
  65.     };
  66.  private void print(String message) {
  67. Log.i(TAG, message);
  68. }
  69. private void checkResult(int result, String method) {
  70. if (result != 0) {
  71. print("error code :" + result + " method:" + method + ", 错误码文档:http://yuyin.baidu.com/docs/tts/122 ");
  72. }
  73. }
  74. public void Destory(){
  75. if (mTts != null){
  76. mTts.stopSpeaking();
  77. mTts.destroy();
  78. mTts = null;
  79. print("释放资源成功");
  80. }
  81. }
  82. }

  1. package com.itheima.xunfeidemo;
  2. import android.os.Bundle;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.EditText;
  7. import android.widget.TextView;
  8. import android.widget.Toast;
  9. import com.google.gson.Gson;
  10. import com.iflytek.cloud.RecognizerResult;
  11. import com.iflytek.cloud.SpeechConstant;
  12. import com.iflytek.cloud.SpeechError;
  13. import com.iflytek.cloud.SpeechSynthesizer;
  14. import com.iflytek.cloud.SpeechUtility;
  15. import com.iflytek.cloud.ui.RecognizerDialog;
  16. import com.iflytek.cloud.ui.RecognizerDialogListener;
  17. import java.util.List;
  18. public class MainActivity extends AppCompatActivity {
  19. private EditText test;
  20. private Button button;
  21. private String message;
  22. private Speek speek;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27. speek=new Speek(this);
  28. initView();
  29. }
  30. private void initView(){
  31. test=(EditText)findViewById(R.id.editText);
  32. button=(Button)findViewById(R.id.begin);
  33. button.setOnClickListener(new View.OnClickListener() {
  34. @Override
  35. public void onClick(View v) {
  36. message=test.getText().toString();
  37. if(!message.equals(""))
  38. {
  39. speek.Speeking(message);
  40. }
  41. else
  42. {
  43. speek.Speeking("请告诉我,您需要我说些什么");
  44. }
  45. }
  46. });
  47. }
  48. }
  49. 效果如下:

代码下载地址:https://github.com/liudongdong1/XunFeiDemo-master/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/830496
推荐阅读
相关标签
  

闽ICP备14008679号