Unity-Demo之?语音识别-讯飞SDK使用过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Unity-Demo之✨语音识别-讯飞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(NGUAGE, "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;
}
}。