You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中Undertone语音识别二次调用无法识别语音问题排查

问题可能原因分析

结合你提供的RealtimeTranscriber类结构和问题现象,以下是几个核心排查方向:

1. 事件绑定未正确清理

第一个SpeechCheck对象禁用时,没有从RealtimeTranscriber.OnTextTranscribed事件中解绑自身的回调方法。即使对象被禁用,事件仍持有对它的引用,导致后续第二个SpeechCheck绑定的回调无法触发,或触发后被旧对象的失效逻辑拦截。

  • 检查SpeechCheck的禁用逻辑,确保在禁用/销毁时执行transcriber.OnTextTranscribed -= 你的回调方法。

2. 麦克风/音频资源未释放

RealtimeTranscriber的StopListening方法可能未彻底释放麦克风捕获资源,导致第二个SpeechCheck启动监听时无法获取音频输入。即便动态创建销毁SpeechEngine,底层音频设备仍可能被占用。

  • 确认第一个SpeechCheck禁用时是否调用了transcriber.StopListening(),且该方法内部正确终止了音频采集(比如停止麦克风录音的协程或异步任务)。
  • 检查RealtimeTranscriber.OnDestroy()是否处理了音频资源释放,比如终止所有正在运行的异步转录任务。

3. RealtimeTranscriber内部状态未重置

如果场景中RealtimeTranscriber是单例或全局实例,第一个SpeechCheck使用后可能修改了它的内部状态(如VAD阈值、转录协程的运行状态)且未在停止后重置。第二个SpeechCheck调用StartListening时,异常状态导致无法触发转录:

  • 检查StartListening方法是否会重置VAD检测的状态变量,确保每次启动都是全新的检测状态。
  • 确认TranscribeCoroutine在停止监听时被正确终止,避免旧协程阻塞新的转录流程。

4. 异步转录任务遗留阻塞

TranscribeAudioClipAsync是异步任务,第一个SpeechCheck禁用时可能仍有未完成的异步任务在运行,占用SpeechEngine的处理资源,导致新的音频数据无法被处理。

  • 检查StopListening方法是否会取消所有正在运行的TranscribeAudioClipAsync任务,确保资源及时释放。

5. 动态创建SpeechEngine的初始化问题

动态创建SpeechEngine时,可能缺少必要的初始化步骤(如设置语言模型、匹配麦克风采样率),导致引擎无法正常处理音频输入:

  • 对比静态挂载的SpeechEngine配置,确保动态创建的实例参数完全一致,包括音频格式、模型路径等。
  • 验证动态创建的SpeechEngine是否在调用StartListening前完成了初始化(比如是否有异步初始化逻辑未等待完成)。

内容的提问来源于stack exchange,提问作者Amarth Gül

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:57:37