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
相关产品推荐
相关产品推荐

