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

Azure语音转录无识别结果:UI触发转录功能失效求助

语音转文字功能故障排查

我在UI中设置了启动转录流程的按钮,但该功能无法正常工作。目前仅能看到SessionStarted事件输出的------> Started,Recognizing和Recognized事件无任何输出,无法完成语音转文字,已确认传入参数齐全,请求排查解决。

相关代码

AzureTranscriptionService服务代码

public List<char> Letters { get; set; }

public StringBuilder Builder { get; set; }

public AzureTranscriptionService() {
    Letters = new List<char>();
    Builder = new StringBuilder();
}

public async Task<string> ConvertToTextAsync(
    string FilePath,
    string Language,
    string WordDocName) {

    //Configure speech service
    var config = SpeechConfig.FromSubscription
        (ConstantsHelpers.AZURE_KEY,
        ConstantsHelpers.AZURE_REGION);

    config.EnableDictation();
    config.SpeechRecognitionLanguage = Language;

    //Configure speech recognition
    var taskCompleteionSource = new TaskCompletionSource<int>();

    using var audioConfig = AudioConfig.FromWavFileInput(FilePath);
    {
        using var speechRecognizer = new SpeechRecognizer(config, audioConfig);

        speechRecognizer.Recognized += (sender, e) => {
            if (e.Result.Reason == ResultReason.RecognizedSpeech) {
                foreach (var c in e.Result.Text) {
                    Letters.Add(c);
                    Debug.WriteLine(c);
                }
            }
        };

        speechRecognizer.SessionStarted += (sender, e) => {
            Debug.WriteLine("------> Started");
        };

        speechRecognizer.SessionStopped += (sender, e) => {
            Debug.WriteLine("Stop");
            foreach (var item in Letters) {
                Builder.Append(item);
            }
        };

        speechRecognizer.Recognizing += (sender, e) => {
            Debug.WriteLine(e.Result.Text);
        };

        await speechRecognizer.StartContinuousRecognitionAsync()
            .ConfigureAwait(false);

        Task.WaitAny(new[] { taskCompleteionSource.Task });

        await speechRecognizer.StopContinuousRecognitionAsync()
            .ConfigureAwait(false);
    }

    return Builder.ToString();
}

主ViewModel调用代码

private async void StartAction(object obj) {
    var FileWithoutExtension = Path.GetFileNameWithoutExtension(FilePath);

    var AudioPath = FolderHelper.CreateFolder(ConstantsHelpers.AUDIO);
    var DocumentPath = FolderHelper.CreateFolder();

    var AudioFileNamePath = Path.Combine(AudioPath, $"{FileWithoutExtension}{ConstantsHelpers.WAV}");
    var ConvertedAudioPath = AudioHelper.Converter(FilePath!, AudioFileNamePath);

    var DocumentName = Path.Combine(DocumentPath, $"{FileWithoutExtension}{ConstantsHelpers.DOCX}");

    await AzureTranscription.ConvertToTextAsync(ConvertedAudioPath, SelectedItem, DocumentName);
}

排查方向

  • 任务完成源未触发:代码中用Task.WaitAny(new[] { taskCompleteionSource.Task })等待流程结束,但taskCompleteionSource从未被标记为完成,导致识别逻辑一直阻塞,无法处理音频内容。需要在音频识别会话结束或音频播放完成时调用taskCompleteionSource.SetResult(0)。
  • 音频格式不兼容:确认ConvertedAudioPath对应的WAV文件是否符合Azure Speech Service要求(推荐16kHz采样率、16位单声道PCM编码),可通过音频工具(如Audacity)检查属性,或在创建AudioConfig时明确指定格式参数。
  • SessionStopped事件未触发:当前依赖SessionStopped拼接结果,若会话未正常终止,这部分逻辑不会执行。建议直接在Recognized事件中更新Builder,无需先存到Letters列表再拼接,减少中间环节的问题。
  • 异步阻塞风险:Task.WaitAny在异步方法中可能引发死锁,建议替换为await taskCompleteionSource.Task,同时确保ConfigureAwait(false)的使用场景合理。
  • 缺失错误监听:添加Canceled事件监听,排查是否存在识别错误或取消情况:
    speechRecognizer.Canceled += (sender, e) => {
        Debug.WriteLine($"识别取消:{e.Reason},错误详情:{e.ErrorDetails}");
        taskCompleteionSource.SetResult(0);
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:01:24