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

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"});
    

    若无需自动检测语言,直接移除该参数,简化识别器初始化。

  • 确认安卓平台权限配置

    1. 检查Platforms/Android/AndroidManifest.xml是否添加麦克风权限声明:
      <uses-permission android:name="android.permission.RECORD_AUDIO" />
      
    2. 确保动态权限申请逻辑正确,比如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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:02:38