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

Unity中System.Speech.Recognizer后台运行失效问题求助

问题原因及解决办法

核心原因

Windows系统自带的Speech.Recognizer(听写识别器)存在前台激活依赖机制:系统为了优化资源占用,会在程序失去前台焦点时自动暂停或终止识别器进程,即便项目设置了允许后台运行,也无法绕过这个系统层面的限制。另外,OnLostFocus事件触发时程序已失去前台权限,此时重启识别器的操作会被系统权限拦截,导致无法生效。

解决办法

1. 替换为SpeechRecognitionEngine(推荐)

改用程序自主控制的SpeechRecognitionEngine,它不依赖系统前台激活状态,只要程序进程在运行,就能持续进行语音识别。示例代码:

using System.Speech.Recognition;

// 初始化自定义识别引擎
var speechEngine = new SpeechRecognitionEngine();
// 加载听写语法(支持自由语音输入)
speechEngine.LoadGrammar(new DictationGrammar());
// 设置默认音频输入设备
speechEngine.SetInputToDefaultAudioDevice();
// 绑定识别结果处理事件
speechEngine.SpeechRecognized += (sender, e) =>
{
    // 在这里处理识别到的文本
    string result = e.Result.Text;
};
// 启动异步持续识别
speechEngine.RecognizeAsync(RecognizeMode.Multiple);

这个引擎完全由程序控制,不受窗口焦点切换影响,是解决该问题最稳定的方案。

2. 针对Speech.Recognizer的折中方案(不推荐)

如果必须使用系统识别器,可以通过全局窗口钩子监听系统切换事件,在程序即将失去焦点前提前重启识别器;或者在后台定时检查识别器状态,若检测到已停止,尝试重新初始化。但这种方法稳定性差,因为系统仍可能拦截后台的识别器启动请求,仅作为临时过渡方案。

3. 确认系统权限

检查Windows设置中的应用权限:

  • 确保程序拥有音频录制权限(设置→隐私和安全性→麦克风)
  • 确认程序在后台应用权限中被允许运行(设置→应用→安装的应用→找到你的程序→高级选项→后台应用权限设为“始终允许”)

内容的提问来源于stack exchange,提问作者Floris Hooge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:30:53