Azure认知语音服务在.NET MAUI安卓应用中始终返回NoMatch问题
解决.NET MAUI安卓语音转文字返回NoMatch的问题
针对你遇到的问题,从代码逻辑和平台配置角度排查,以下是具体修复方向:
音频配置未关联到识别器
代码中创建了audioConfig但初始化SpeechRecognizer时未传入,导致识别器可能未正确绑定麦克风输入。修改识别器初始化代码:// 如果使用自动检测语言 using(var recognizer = new SpeechRecognizer(config, autoDetectSourceLanguageConfig, audioConfig)) // 如果不需要自动检测语言,直接传音频配置 // using(var recognizer = new SpeechRecognizer(config, audioConfig))自动检测语言配置未初始化
代码中使用了autoDetectSourceLanguageConfig但未定义初始化逻辑,需先创建该配置实例:var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new List<string>{"en-US", "zh-CN"});若无需自动检测语言,直接移除该参数,简化识别器初始化。
确认安卓平台权限配置
- 检查
Platforms/Android/AndroidManifest.xml是否添加麦克风权限声明:<uses-permission android:name="android.permission.RECORD_AUDIO" /> - 确保动态权限申请逻辑正确,比如
micService.GetPermissionAsync()内部需调用:await Permissions.RequestAsync<Permissions.Microphone>();
- 检查
替换单次识别为连续识别排查问题
RecognizeOnceAsync仅支持短语音识别(最长15秒),若说话时机或音量问题容易返回NoMatch。尝试改用连续识别测试:using(var recognizer = new SpeechRecognizer(config, audioConfig)) { recognizer.Recognized += (s, e) => { if (e.Result.Reason == ResultReason.RecognizedSpeech) { MainThread.BeginInvokeOnMainThread(() => UpdateTranscription(e.Result.Text)); } }; await recognizer.StartContinuousRecognitionAsync(); // 可添加停止逻辑,比如延迟5秒后停止 await Task.Delay(5000); await recognizer.StopContinuousRecognitionAsync(); }修正UI更新的线程问题
使用ConfigureAwait(false)后,若UpdateTranscription涉及UI操作,需确保在主线程执行:MainThread.BeginInvokeOnMainThread(() => UpdateTranscription("NOMATCH: Speech could not be recognized."));
内容的提问来源于stack exchange,提问作者Mithilesh
相关产品推荐
相关产品推荐

