Unity端接入讯飞语音识别的离线命令词识别(二)

上章我们讲了在AndroidStudio里跑讯飞原生的demo。
这章我们来将这个在Unity中跑起来。
在这里插入图片描述
因为我们跑的是离线命令词识别功能所以这些脚本都是其他功能使用的,不用管他,直接删掉就行了。
在这里插入图片描述
大家看清楚这段代码,这段代码的意思是将你讯飞平台上的appid注册到应用中去。就是上一张我同样涂红的那部分。这里的代码可以复制过来。在unity中初始化离线命令词识别的时候可以用。
在这里插入图片描述
注释掉后面的继承,这里继承是为了安卓端能够点击,在Unity里没用。

在这里插入图片描述
同样的create方法在也是安卓的生命周期,我们在Unity里跑也不需要。可以不管他或者注释掉这部分代码。
同理下面的initlayoutonclick这两个方法我们也可以不管或者注释掉。
在这里插入图片描述
我们将showTip方法体注释掉,在Unity中我们不用Toast显示,我们使用Unity的Text来显示。
剩下还有好多地方需要注释的我就不一一来讲了。我在文章的最后会放上工程的链接地址。大家直接看我的代码就行了,毕竟大家都是程序员,这么简单的代码看看应该没啥问题。
我接下来来讲新增的代码,也就是我自己添加的代码。
在这里插入图片描述
这段代码是拿来获取Unity的Activity的,这个获取到了后面还有作用。

在这里插入图片描述
这个方法上面的那部分是将appid注入到当前的识别引擎中去的,下面的话也是同样的道理,将配置文件注入进当前的activity中。

/**
	 * Toast显示unity发送过来的内容
	 * @param content           消息的内容
	 * @return                  调用是否成功
	 */
	public boolean showToast(String content){
		Toast.makeText(getActivity(),content,Toast.LENGTH_SHORT).show();
		//这里是主动调用Unity中的方法,该方法之后unity部分会讲到
		callUnity("Main Camera","FromAndroid", "hello unity i'm android");
		return true;
	}

	/**
	 * 调用Unity的方法
	 * @param gameObjectName    调用的GameObject的名称
	 * @param functionName      方法名
	 * @param args              参数
	 * @return                  调用是否成功
	 */
	boolean callUnity(String gameObjectName, String functionName, String args){
		try {
			Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");
			Method method =classtype.getMethod("UnitySendMessage", String.class,String.class,String.class);
			method.invoke(classtype,gameObjectName,functionName,args);
			return true;
		} catch (ClassNotFoundException e) {

		} catch (NoSuchMethodException e) {

		} catch (IllegalAccessException e) {

		} catch (InvocationTargetException e) {

		}
		return false;
	}

应该很简单吧。我就不多讲了。
在这里插入图片描述
红色这行是为了在Unity中能够看见我们的识别结果。
修改一下AndroidManifest.xml文件,我们没必要留一些acitvity文件,我们这个只是个aar的包。
在这里插入图片描述
打aar包的话我就不多讲了,我之前的文章也讲过。
打aar包优化教程.大家可以自己去看下。
接下来我们来讲Unity部分代码

using UnityEngine;
using UnityEngine.UI;

public class Main : MonoBehaviour
{

    /// <summary>
    /// 场景上的文本框用来显示android发送过来的内容
    /// </summary>
    public Text text;

    /// <summary>
    /// android原生代码对象
    /// </summary>
    AndroidJavaObject _ajc;

    void Start()
    {
        //通过该API来实例化导入的arr中对应的类
        _ajc = new AndroidJavaObject("com.iflytek.mscv5plusdemo.AsrDemo");
    }

    void Update()
    {

    }

    /// <summary>
    /// 场景上按点击时触发该方法
    /// </summary>
    public void OnBtnClick()
    {
        //通过API来调用原生代码的方法
        bool success = _ajc.Call<bool>("InitAsr");
        if (true == success)
        {
            //请求成功
        }
    }

    public void OnBtnClick2()
    {
        //通过API来调用原生代码的方法
        bool success = _ajc.Call<bool>("Buildsyntax");
        if (true == success)
        {
            //请求成功
        }
    }

    public void OnBtnClick3()
    {
        //通过API来调用原生代码的方法
        bool success = _ajc.Call<bool>("StartRecognize");
        if (true == success)
        {
            //请求成功
        }
    }

    /// <summary>
    /// 原生层通过该方法传回信息
    /// </summary>
    /// <param name="content"></param>
    public void FromAndroid(string content)
    {
        text.text = content;
    }
}

三个方法分别调用了安卓的初始化,构建语法,开始识别三个功能
_ajc = new AndroidJavaObject(“com.iflytek.mscv5plusdemo.AsrDemo”);
尤其要注意的是这行,不能获取错了类名,否则会报错没办法运行
将打出来的aar包放在Asset/plugin/Android下,之后将该脚本悬挂至Camera上然后在场景中创建三个button来分别调用这个方法。
在这里插入图片描述

像上图这样。
然后就打包成apk运行在手机上就行了。

注意事项

我接下来会给出我的项目仓库地址,但是由于讯飞的注册体验时间是三个月,你们拿到之后假如要体验我的项目的话,将我Android工程中的appid和资源在这里插入图片描述
更换为你们自己的。

仓库地址

如果有错误的地方请大家指出来,在下方评论即可。我隔一段时间会上一次

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
Unity 语音识别 Web 是一种通过 Unity 引擎与语音识别技术结合的解决方案。它允许开发者在网页应用程序中集成语音识别功能,以实现语音控制和交互。该解决方案具有以下特点和优势。 首先,Unity 语音识别 Web 具有高度的准确性和稳定性。语音识别技术在语音识别领域具有广泛的应用和良好的口碑,能够准确地识别各种类型的语音指令和口述内容。 其次,该解决方案具有良好的兼容性和易用性。通过 Unity 引擎,开发者可以在不同浏览器和操作系统中使用该语音识别功能,实现跨平台的语音交互。同时,Unity 的易用性使开发者能够快速集成和配置语音识别模块,减少开发时间和工作量。 第三,Unity 语音识别 Web 具有丰富的语音识别功能。它支持多种语种的语音输入和识别,可应用于全球范围的网页应用。此外,该解决方案还提供了语音唤醒、语音合成等附加功能,增强了用户的语音交互体验。 最后,Unity 语音识别 Web 具有良好的安全性和隐私保护机制。语音识别技术采用了先进的数据加密和隐私保护措施,确保用户的语音数据得到保护,不会被滥用或泄露。这使得网页应用程序能够安全地使用语音识别功能。 综上所述,Unity 语音识别 Web 是一种功能强大、易用、安全可靠的语音识别解决方案,为网页应用程序的语音交互提供了便利和创新的可能性。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值