【工程配套】在Unity项目中接入思必驰语音SDK,实现类似“语音助手”的功能


思必驰提供了安卓SDK,基于此实现Unity调用安卓SDK的原生接口。

在Unity项目中接入思必驰语音SDK,实现了简单的语音助手Demo。

此文档为工程配套文档。


一、获取思必驰SDK的Token

这里采用动态注册的方式(注册仅为一种鉴权方式,无论哪种鉴权方式,都不会影响语音识别、语音合成、语音唤醒的功能)。

若是要使用其它注册方式,请参考官方文档。https://cloud.aispeech.com/docs/product_authorization

1. 创建产品

2. 申请Token

思必驰SDK提供了动态注册的授权方式,这里需要申请所需的Token

  • 进入授权管理
    在这里插入图片描述
  • 点击申请APIKEY,输入(你要开发的安卓程序的包名)packagename和(你要开发的安卓程序打包签名时用到的keystore文件)keystore的SHA256值。
    在这里插入图片描述
  • 点击确定,得到APIKEY(记录下红框中的内容,后续备用)

在这里插入图片描述

3. 补充:包名获取

原生开发方式获取

获取build.gradle文件中的ApplicationId作为PackageName;如果没有设置ApplicationId,请以AndroidManifest.xml配置文件的package 属性为准。

Unity开发获取

安卓平台下

在ProjectSettings中设置PackageName
在这里插入图片描述

4. 补充:生成keystore文件

生成keystore文件

参考文档:https://eqgis.blog.csdn.net/article/details/148040233
对于Unity开发者,建议直接在Unity中创建
在这里插入图片描述

5. 补充:获取SHA256值

注意:JDK需配置环境变量

  • 检查是否将JDK配置环境变量,输入“keytool”,以下情况为正常。
    在这里插入图片描述

  • 输入命令:keytool -v -list -keystore keystore文件路径

debug.keystore:命令为:keytool -list -v -keystore debug.keystore

自定义的 keystore:命令为:keytool -list -v -keystore apk的keystore

  • 查看SHA256,复制内容。在之前的申请APIKEY的地方时使用

在这里插入图片描述

二、Unity配置

注意:这里需使用我提供的工程Demo(或是导入我提供的unitypackage)

1. 配置Token

  • 打开EQGIS->Settings,填写思必驰的相关Token信息
    在这里插入图片描述
  • 保存修改

2. 创建“Assistant”

  • 在场景中创建对象

示例工程中的SampleScene中默认创建,无需额外创建。这里记录仅是作参考
在这里插入图片描述

  • 检视对象

默认已在对象挂载脚本并绑定
在这里插入图片描述

三、语音唤醒

1. 修改唤醒词

唤醒词要求为拼音。

在以下代码位置替换唤醒词即可
在这里插入图片描述

四、语音合成

TTS功能(文本转语音)

1. 预设文本转语音

关键步骤:

  • 替换textContent
  • 启动ttsEngine
    代码示例:
entity.ttsEngine.textContent = entity.RandomResponse(entity.wakeupResponses);
entity.status = VoiceAssistantStatus.SPEEKING;
entity.ttsEngine.StartEngine();

补充说明:你可以找到SbcTtsEngine.cs中StartEngine的引用位置。自定义语音反馈,亦或是通过Unity的AudioClip播放预设音频也可以实现语音反馈。

在这里插入图片描述

五、语音识别

ASR功能(语音转文本)

1. 修改本地语音识别的预设文本

当前采用本地识别,则需要预先根据XBNF语法,设置文件。
当前安卓原生部分引入的SDK配置的XBNF文件在Assets目录下。

打包后的安卓aar文件,在Unity的Eqgis/Plugins/Android目录下
在这里插入图片描述

打开aar(当做一个zip文件打开就行)
在这里插入图片描述- 查看local_asr.xbnf(替换文本内容),需保持替换前后文件同名。
在这里插入图片描述

补充:若是你无法通过上述方式替换成功,请将xbnf文件提供给源码作者,重新编译aar。

此外需要注意的是:
在这里插入图片描述

2. 识别到语音内容

默认逻辑:唤醒词唤醒->助手答复后->(启动语音识别监听)语音识别

你可以参考以下代码位置的实现修改逻辑

  • 在第一次TTS(文本转语音)后,(认定为助手答复)启动语音识别监听。
    在这里插入图片描述
  • 当识别到语音内容时,触发Recognize事件

Unity开发者,在此处处理识别到的语音文本
在这里插入图片描述

3. 允许超时的次数设置

ASR识别超时重试,若是超时。可以执行“请再说一遍”(预设文本可在源码中修改)
在这里插入图片描述

六、指令任务

在识别到语音内容后,我们得到一个String。通过字符串匹配,我们可实现简单的指令任务。

1. VoiceCommandManager

  • 场景中创建一个游戏对象,挂载VoiceCommandManager脚本
  • 在ASR识别回调的Recognize(String)事件中,回调出的String就是监听到用户说的话。
  • 调用挂载VoiceCommandManager组件的Rec(string)方法

这里实现了根据指令修改Cube颜色的字符串匹配示例,可做参考。

在这里插入图片描述

七、运行说明

1. 运行平台

项目采用安卓原生的aar,仅可运行在安卓设备上。

2. 运行日志

接口预留了日志打印方法。Unity项目中配置条件编译。“DEBUG_LOG”
参考EqLog.cs

#if DEBUG_LOG
        private static string logFilePath = Application.persistentDataPath + "/runtime.log";
#endif

文件日志保存在安卓根目录/Android/data/你的包名/files/runtime.log文件中。示例如下:
在这里插入图片描述

3. 缓存文件

  • 思必驰通过Token动态注册(鉴权)时,第一次会联网鉴权,生成缓存文件。后续动态注册会根据缓存文件鉴权。(因此无需再联网)
  • 鉴权成功后,语音识别引擎启动时,会根据xbnf文件编译bin文件,保存在缓存文件夹中。(因此第一次启动语音识别引擎时,耗时会受到xbnf文件大小影响)

在这里插入图片描述

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EQ-雪梨蛋花汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值