因为工作需求,现在要选择连接一个语音识别功能接入系统中,所以目前正在尝试使用讯飞的语音识别SDK进行连接。
在使用语音识别的sdk之前先查阅了一下语音识别的基本知识
然后去讯飞的官网注册信息并创建一个应用用于使用SDK
基本步骤处理完了,下面就是下载SDK进行集成使用了,我这里用的是语音唤醒的SDK,按照官方教程做就行。教程在这-语音唤醒SDK教程
当上面这几步做完了之后,接下来就是将这个工程打包成给unity使用的aar包了。可以参考这个教程:将Android Studio的工程打包成aar包给unity使用
这样只是将讯飞语音的SDK可以跟Unity一起使用了,但是还没有写具体调用sdk的使用方法,还需要在Android Studio中写一些调用此语音识别的SDK的接口提供给Unity中使用才行。
正文:
简单分析下SDK的结构,便于使用
SDK包说明
《Android SDK目录结构一览》
manifests:android配置应用权限文件
sample:相关离线能力demo(语音唤醒WakeDemo)
assets:SDK相关资源配置文件
Libs:动态库和jar包
res:UI文件和相关布局文件xml
readme说明(必看)
release 版本说明
吐了 语音唤醒搞了一天了,unity打包出来apk居然直接白屏
安卓端语音识别代码
package com.example.unity_asr; import android.os.Bundle; import android.util.Log; import com.iflytek.cloud.RecognizerListener; import com.iflytek.cloud.RecognizerResult; import com.iflytek.cloud.SpeechError; import com.iflytek.cloud.SpeechRecognizer; import com.iflytek.cloud.SpeechConstant; import com.iflytek.cloud.SpeechUtility; import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; import java.util.LinkedHashMap; public class MainActivity extends UnityPlayerActivity { private SpeechRecognizer mIat; private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始化 SpeechUtility.createUtility(this, SpeechConstant.APPID + "=60307482"); mIat = SpeechRecognizer.createRecognizer(this, null); //设置mIat的参数 //表示是什么服务 mIat.setParameter(SpeechConstant.DOMAIN, "iat"); //设置语言 mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); //接受语言的类型 mIat.setParameter(SpeechConstant.ACCENT, "mandarin"); //使用什么样引擎 mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); } //创建一个监听器 RecognizerListener mRecognizerLis = new RecognizerListener() { @Override//当声音改变的时候调用 public void onVolumeChanged(int i, byte[] bytes) { } @Override//开始说话的时候调用 public void onBeginOfSpeech() { } @Override//结束说话的时候调用 public void onEndOfSpeech() { } @Override//返回结果 public void onResult(RecognizerResult recognizerResult, boolean b) { printResult(recognizerResult); } @Override//出错的时候调用 public void onError(SpeechError speechError) { } @Override//自定义事件 public void onEvent(int i, int i1, int i2, Bundle bundle) { } }; //解析Json的方法 //方法来自speechDemo->java->voicedemo->IatDemo中的printResult方法 private void printResult(RecognizerResult results) { String text = JsonParser.parseIatResult(results.getResultString()); String sn = null; // 读取json结果中的sn字段 try { JSONObject resultJson = new JSONObject(results.getResultString()); sn = resultJson.optString("sn"); } catch (JSONException e) { e.printStackTrace(); } mIatResults.put(sn, text); StringBuffer resultBuffer = new StringBuffer(); for (String key : mIatResults.keySet()) { resultBuffer.append(mIatResults.get(key)); } //把消息发送给Unity场景中MsgController物体上的OnResult方法 UnityPlayer.UnitySendMessage("MsgController", "OnResult", resultBuffer.toString()); } //这个方法让Unity来调用 public void beginListen() { //开始识别 mIat.startListening(mRecognizerLis); } public int beginTest(int a, int b){ //交互测试 UnityPlayer.UnitySendMessage("Canvans","TestDemo",""); return a+b; } }