Microsoft CognitiveServices语音类SpeechRecognizer,无法收集结果文本

问题描述 投票:0回答:1

我无法使用SpeechRecognizer类从wav文件中获取文本。

当我调试下面的代码时,我看到当我延迟时会收到文本,但最终会崩溃。

代码不正确吗?

为了等待所有结果并将它们收集在字段变量totalText中,我缺少什么?

using (var audioInput = AudioConfig.FromWavFileInput(wavFile))
{
    using (var recognizer = new SpeechRecognizer(configuration, audioInput))
    {
        recognizer.Recognized += (s, e) =>
        {
            if (e.Result.Reason == ResultReason.RecognizedSpeech)
            {
                System.Diagnostics.Debug.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
                totalText += e.Result.Text;

            }
            else if (e.Result.Reason == ResultReason.NoMatch)
            {
                System.Diagnostics.Debug.WriteLine($"NOMATCH: Speech could not be recognized.");
            }
        };

        recognizer.Canceled += (s, e) =>
        {
            System.Diagnostics.Debug.WriteLine($"CANCELED: Reason={e.Reason}");

            if (e.Reason == CancellationReason.Error)
            {
                System.Diagnostics.Debug.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
                System.Diagnostics.Debug.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
                System.Diagnostics.Debug.WriteLine($"CANCELED: Did you update the subscription info?");
            }

            stopRecognition.TrySetResult(0);
        };

        recognizer.SessionStarted += (s, e) =>
        {
            System.Diagnostics.Debug.WriteLine("\n    Session started event.");
        };

        recognizer.SessionStopped += (s, e) =>
        {
            System.Diagnostics.Debug.WriteLine("\n    Session stopped event.");
            System.Diagnostics.Debug.WriteLine("\nStop recognition.");
            stopRecognition.TrySetResult(0);
        };

        recognizer.SpeechEndDetected += (s, e) =>
        {
            System.Diagnostics.Debug.WriteLine($"SpeechEndDetected: Did you update the subscription info?");
            SaveFile(totalText);
            stopRecognition.TrySetResult(0);
        };

        // Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
        await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

        // Waits for completion.
        // Use Task.WaitAny to keep the task rooted.
        Task.WaitAny(new[] { stopRecognition.Task });

        // Stops recognition.
        await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
        if (totalText != string.Empty)
        {
            SaveFile(totalText);
        }
    }
}

我最终得到这个结果。

The program '[9312] testhost.exe' has exited with code 0 (0x0).
enter code here
c# async-await speech-recognition speech-to-text azure-cognitive-services
1个回答
0
投票

对以上代码的调用是同步完成的,而不是异步的,因此会导致行为不稳定。

© www.soinside.com 2019 - 2024. All rights reserved.