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

Unity 项目接入思必驰语音 SDK 实现“语音助手”功能教程

思必驰(AISpeech,简称 SciSpeech)是国内领先的语音技术提供商,其语音 SDK 支持语音唤醒(Wake-up)、语音合成(TTS)和语音识别(ASR),非常适合在 Unity 项目中构建类似“语音助手”的功能(如 Siri 或小爱同学)。SDK 主要针对 Android/iOS 平台,Unity 接入需通过平台特定插件(aar/jar for Android,framework for iOS)。本教程基于思必驰的 Unity 示例工程(需从官方开源仓库或文档获取),聚焦 Android 平台(iOS 类似,但需额外处理权限)。整个实现包括:唤醒助手、合成响应、识别指令并执行任务(如修改物体颜色)。

注意:

  • SDK 需要动态注册 Token(离线可用,但首次需联网)。
  • 仅支持特定平台(Android/iOS),PC/Web 需要额外云 API。
  • 免费版有调用限制,商用需申请企业版。
  • 示例工程:从思必驰开发者社区(https://cloud.aispeech.com/)下载 Demo,或搜索“思必驰 Unity SDK 示例”获取源码。

一、准备工作

  1. 注册开发者账号
  • 访问思必驰开发者平台(https://cloud.aispeech.com/)。
  • 创建账号并登录。
  1. 创建产品并获取 Token
  • 进入控制台 > “基础技术接入”。
  • 选择语音相关服务(语音识别、语音合成、语音唤醒)。
  • 进入“授权管理” > 申请 APIKEY。
  • 输入 Unity 项目的 Android 包名(Player Settings > Android > Identification > Package Name,例如 com.example.myapp)和 keystore 文件的 SHA256 值。
  • 申请后获取 APIKEY(记录 AppID、AppSecret 和其他信息)。
  1. 生成 keystore 文件并获取 SHA256
  • 在 Unity 中:Edit > Project Settings > Player > Publishing Settings > Create a new keystore。
  • 命令行获取 SHA256:keytool -v -list -keystore your_keystore.keystore(输入密码后查看 SHA256)。
  1. 下载 SDK
  • 从思必驰官网下载 Android SDK(aar 文件)和 Unity 示例包(unitypackage)。
  • 如果没有示例,从社区文章获取开源工程(例如 Volcengine 开发者社区的 Demo)。

二、Unity 项目配置

  1. 导入 SDK 和示例包
  • 创建新 Unity 项目(推荐 3D Core 模板)。
  • 导入 unitypackage(包含预设脚本和配置)。
  • 对于 Android:将思必驰的 aar 文件拷贝到 Assets/Plugins/Android/ 目录。
  1. 设置 Token
  • 打开示例工程中的“EQGIS > Settings”面板(或类似配置窗口)。
  • 填写 AppID、AppSecret 和其他 Token 信息。
  • 保存设置(会生成本地缓存,允许离线使用)。
  1. 平台设置
  • Edit > Project Settings > Player > Android > Other Settings > Target API Level:至少 24+(SDK 要求)。
  • 启用 Microphone 权限(Player Settings > Android > Configuration > Internet Access > Require)。
  • Build Settings > Platform > Android,构建测试 APK。

三、实现语音唤醒

语音唤醒是“语音助手”的入口,使用预设唤醒词(拼音)触发。

  1. 修改唤醒词
  • 在脚本中查找唤醒逻辑(示例:SbcWakeupEngine.cs 或类似)。
  • 替换默认唤醒词:
    csharp:disable-run private string wakeWord = "xiao chi xiao chi"; // 修改为你的拼音唤醒词
  • 确保唤醒词符合 SDK 要求(拼音,无特殊字符)。
  1. 唤醒事件处理
  • 当唤醒时,触发 TTS 响应(如“在呢”)。
  • 示例代码(从 Demo 提取): public class VoiceAssistant : MonoBehaviour { public SbcWakeupEngine wakeupEngine; public SbcTtsEngine ttsEngine; public SbcAsrEngine asrEngine; void Start() { wakeupEngine.StartEngine(); // 启动唤醒监听 wakeupEngine.OnWakeup += OnWakeupDetected; } private void OnWakeupDetected() { ttsEngine.textContent = "我在呢"; // 随机响应 ttsEngine.StartEngine(); // 合成并播放 // TTS 完成后启动 ASR ttsEngine.OnTtsComplete += () => asrEngine.StartEngine(); } }

四、实现语音合成(TTS)

TTS 用于助手反馈,将文本转为语音播放。

  1. 配置 TTS
  • 在 Settings 中设置 TTS 参数(音色、语速等)。
  1. 调用 TTS
  • 设置 textContent 并启动引擎。
  • 示例: public class SbcTtsEngine : MonoBehaviour { public string textContent; public event Action OnTtsComplete; public void StartEngine() { // 调用 SDK API 合成(Demo 中封装) SciSpeech.TTS.Synthesize(textContent, OnSynthesisComplete); } private void OnSynthesisComplete(AudioClip clip) { AudioSource.PlayClipAtPoint(clip, Vector3.zero); OnTtsComplete?.Invoke(); } }
  1. 随机响应
  • 定义响应数组:
    csharp public string[] wakeupResponses = { "在呢", "有什么事?" }; textContent = wakeupResponses[UnityEngine.Random.Range(0, wakeupResponses.Length)];

五、实现语音识别(ASR)

ASR 用于识别用户语音指令,实现“语音助手”的交互。

  1. 配置本地 XBNF 语法
  • SDK 使用 XBNF 文件定义识别语法(aar 中的 local_asr.xbnf)。
  • 修改 XBNF:打开 aar(作为 ZIP),编辑 local_asr.xbnf(替换预设指令,如“变红”)。
  • 示例 XBNF 内容:
    #BNF+IWSR 1.0; !grammar commands; !start <command>; <command>: 变红 | 变蓝 | 跳跃 | 停止;
  • 保存后重新打包 aar,或联系 SDK 提供者编译。
  1. 识别事件处理
  • 启动 ASR 引擎,监听结果。
  • 示例: public class SbcAsrEngine : MonoBehaviour { public event Action<string> OnRecognize; public void StartEngine() { // 调用 SDK 启动识别 SciSpeech.ASR.StartListening(OnRecognitionResult); } private void OnRecognitionResult(string result) { OnRecognize?.Invoke(result); // 触发事件 } }
  1. 指令匹配
  • 在 VoiceCommandManager 中处理识别结果: public class VoiceCommandManager : MonoBehaviour { public GameObject cube; // 示例物体 public void Rec(string command) { switch (command) { case "变红": cube.GetComponent&lt;Renderer&gt;().material.color = Color.red; break; case "变蓝": cube.GetComponent&lt;Renderer&gt;().material.color = Color.blue; break; case "跳跃": cube.GetComponent&lt;Rigidbody&gt;().AddForce(Vector3.up * 5f, ForceMode.Impulse); break; default: // 无匹配,TTS 反馈 AudioManager.Instance.ttsEngine.textContent = "没听懂,请再说一遍"; AudioManager.Instance.ttsEngine.StartEngine(); break; } } }
  • 在 ASR OnRecognize 事件中调用 Rec(command)。

六、构建“语音助手”完整逻辑

  • 整体流程
  1. 启动唤醒监听(Awake/Start)。
  2. 唤醒检测 -> TTS 随机响应(“在呢”)。
  3. TTS 完成后 -> 启动 ASR 监听(超时重试 2-3 次,TTS 反馈“请再说一遍”)。
  4. ASR 识别结果 -> 指令匹配执行任务(修改物体、播放动画等)。
  5. 执行后可选 TTS 反馈(“已完成”)。
  • 示例场景:创建一个 Cube,语音说“变红”改变颜色;“跳跃”让它跳起。
  • 日志调试:SDK 日志保存在 Android 设备路径:/Android/data/包名/files/runtime.log。

七、注意事项与优化

  • 权限:AndroidManifest.xml 添加 Microphone 权限(Unity 自动处理)。
  • 离线 vs 在线:本地 ASR 需 XBNF 支持有限词汇;在线 ASR 需网络,延迟更高。
  • 性能:移动端测试录音延迟;优化:使用协程管理流程,避免阻塞。
  • 扩展:集成 NLP(如百度/腾讯 API)处理复杂指令;添加 VAD(语音活动检测)减少误唤醒。
  • 测试:在真机上运行 APK;模拟唤醒需实际语音输入。
  • 商用:免费版有限额,检查思必驰定价。

通过以上步骤,可在 Unity 中快速接入思必驰 SDK 实现语音助手。如果需要完整 Demo 源码或 iOS 版本,请从思必驰官网下载示例工程!
“`

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注