分享

Unity -Demo 之 ✨ 语音识别-讯飞SDK使用过程

 敲代码的小Y 2021-12-01

因为工作需求,现在要选择连接一个语音识别功能接入系统中,所以目前正在尝试使用讯飞的语音识别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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多