当前位置:   article > 正文

科大讯飞语音唤醒(Android)_android 语音唤醒 打开弹窗

android 语音唤醒 打开弹窗

前面的工程项目配置和语音识别差不多,但是需要从SDK的res文件夹中复制ivw文件夹粘贴到main下面的assets文件夹下面。具体的文件配置结构,我截个图给大家看看:
在这里插入图片描述
剩下的步骤就是两页代码了,附上!
首先是MyApplication中的代码:

  1. public class MyApplication extends Application {
  2. @Override
  3. public void onCreate() {
  4. initializeIflytek();
  5. super.onCreate();
  6. }
  7. private void initializeIflytek()
  8. {
  9. StringBuffer param = new StringBuffer();
  10. //IflytekAPP_id为我们申请的Appid
  11. param.append("appid="+getString(R.string.IflytekAPP_id));
  12. param.append(",");
  13. // 设置使用v5+
  14. param.append(SpeechConstant.ENGINE_MODE+"="+ SpeechConstant.MODE_MSC);
  15. SpeechUtility.createUtility(MyApplication.this, param.toString());
  16. }
  17. }

然后是MainActivity中的代码:

  1. package com.example.study01;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.os.Environment;
  5. import android.widget.SeekBar;
  6. import android.widget.TextView;
  7. import android.widget.Toast;
  8. import com.iflytek.cloud.SpeechConstant;
  9. import com.iflytek.cloud.SpeechError;
  10. import com.iflytek.cloud.VoiceWakeuper;
  11. import com.iflytek.cloud.WakeuperListener;
  12. import com.iflytek.cloud.WakeuperResult;
  13. import com.iflytek.cloud.util.ResourceUtil;
  14. import org.json.JSONException;
  15. import org.json.JSONObject;
  16. public class MainActivity extends AppCompatActivity {
  17. //唤醒的阈值,就相当于门限值,当用户输入的语音的置信度大于这一个值的时候,才被认定为成功唤醒。
  18. private int curThresh = 1450;
  19. //是否持续唤醒
  20. private String keep_alive = "1";
  21. private String ivwNetMode = "0";
  22. // 语音唤醒对象
  23. private VoiceWakeuper mIvw;
  24. //存储唤醒词的ID
  25. private String wordID = "";
  26. // 唤醒结果内容
  27. private String resultString;
  28. private TextView tv;
  29. @Override
  30. protected void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.activity_main);
  33. tv=(TextView)findViewById(R.id.tv);
  34. // 初始化唤醒对象
  35. mIvw = VoiceWakeuper.createWakeuper(MainActivity.this, null);
  36. //非空判断,防止因空指针使程序崩溃
  37. mIvw = VoiceWakeuper.getWakeuper();
  38. if(mIvw != null) {
  39. resultString="";
  40. tv.setText(resultString);
  41. // 清空参数
  42. mIvw.setParameter(SpeechConstant.PARAMS, null);
  43. // 唤醒门限值,根据资源携带的唤醒词个数按照“id:门限;id:门限”的格式传入
  44. mIvw.setParameter(SpeechConstant.IVW_THRESHOLD, "0:"+ curThresh);
  45. // 设置唤醒模式
  46. mIvw.setParameter(SpeechConstant.IVW_SST, "wakeup");
  47. // 设置持续进行唤醒
  48. mIvw.setParameter(SpeechConstant.KEEP_ALIVE, keep_alive);
  49. // 设置闭环优化网络模式
  50. mIvw.setParameter(SpeechConstant.IVW_NET_MODE, ivwNetMode);
  51. // 设置唤醒资源路径
  52. mIvw.setParameter(SpeechConstant.IVW_RES_PATH, getResource());
  53. // 设置唤醒录音保存路径,保存最近一分钟的音频
  54. mIvw.setParameter( SpeechConstant.IVW_AUDIO_PATH, Environment.getExternalStorageDirectory().getPath()+"/msc/ivw.wav" );
  55. mIvw.setParameter( SpeechConstant.AUDIO_FORMAT, "wav" );
  56. // 如有需要,设置 NOTIFY_RECORD_DATA 以实时通过 onEvent 返回录音音频流字节
  57. //mIvw.setParameter( SpeechConstant.NOTIFY_RECORD_DATA, "1" );
  58. // 启动唤醒
  59. mIvw.startListening(new MyWakeuperListener());
  60. }else{
  61. showTip("唤醒未初始化");
  62. }
  63. }
  64. public void showTip(String str){
  65. Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
  66. }
  67. /**
  68. * 获取唤醒词功能
  69. * @return 返回文件位置
  70. */
  71. private String getResource() {
  72. final String resPath = ResourceUtil.generateResourcePath(MainActivity.this,ResourceUtil.RESOURCE_TYPE.assets, "ivw/"+getString(R.string.IflytekAPP_id)+".jet");
  73. return resPath;
  74. }
  75. /**
  76. * 唤醒词监听类
  77. * @author Administrator
  78. *
  79. */
  80. private class MyWakeuperListener implements WakeuperListener {
  81. //开始说话
  82. @Override
  83. public void onBeginOfSpeech() {
  84. }
  85. //错误码返回
  86. @Override
  87. public void onError(SpeechError arg0) {
  88. }
  89. @Override
  90. public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
  91. }
  92. @Override
  93. public void onVolumeChanged(int i) {
  94. }
  95. @Override
  96. public void onResult(WakeuperResult result) {
  97. if (!"1".equalsIgnoreCase(keep_alive)) {
  98. //setRadioEnable(true);
  99. }
  100. try {
  101. String text = result.getResultString();
  102. JSONObject object;
  103. object = new JSONObject(text);
  104. StringBuffer buffer = new StringBuffer();
  105. buffer.append("【RAW】 " + text);
  106. buffer.append("\n");
  107. buffer.append("【操作类型】" + object.optString("sst"));
  108. buffer.append("\n");
  109. buffer.append("【唤醒词id】" + object.optString("id"));
  110. buffer.append("\n");
  111. buffer.append("【得分】" + object.optString("score"));
  112. buffer.append("\n");
  113. buffer.append("【前端点】" + object.optString("bos"));
  114. buffer.append("\n");
  115. buffer.append("【尾端点】" + object.optString("eos"));
  116. resultString = buffer.toString();
  117. } catch (JSONException e) {
  118. e.printStackTrace();
  119. }
  120. tv.setText(resultString);
  121. }
  122. }
  123. }

 

最后别忘记添加录音动态权限

大差不差应该就是这些了,但是还是怕同学们会出错,比如:appid是啥没有搞清楚,还有返回文件的位置没有弄清楚,细节吧,我这个是简单的实现语音唤醒功能,希望能对大家有所帮助!

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

闽ICP备14008679号