Unity -Demo 之 ✨ 语音识别-讯飞SDK使用过程
因为工作需求,现在要选择连接一个语音识别功能接入系统中,所以目前正在尝试使用讯飞的语音识别SDK进行连接。在使用语音识别的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;
}
}
更多推荐
所有评论(0)