Gerenciar problemas com a entrada de áudio

Aprenda a lidar com problemas de qualidade de entrada de áudio durante o reconhecimento de voz na sua aplicação SDK de Aplicações Windows.

Importante

O reconhecimento de voz requer a identidade do pacote MSIX. As APIs Windows.Media.SpeechRecognition estão disponíveis apenas quando a sua aplicação é executada com identidade de pacote (empacotada ou empacotada com localização externa). As aplicações não embaladas não podem usar estas APIs.

APIs principais

Descrição geral

A qualidade da entrada de áudio pode afetar a precisão do reconhecimento de voz. Ruído de fundo, microfones abafados e baixo volume são causas comuns de falha de reconhecimento. Trate o evento RecognitionQualityDegrading para que o utilizador saiba quando a qualidade do áudio pode impedir um reconhecimento preciso.

Lidar com a degradação da qualidade

O evento RecognitionQualityDegrading é acionado quando problemas de áudio podem interferir no reconhecimento de voz. Use a SpeechRecognitionQualityDegradingEventArgs.Problem propriedade para determinar o problema específico.

Uma vez que este evento é acionado numa thread em segundo plano, use DispatcherQueue.TryEnqueue para atualizar a interface do utilizador:

private void SpeechRecognizer_RecognitionQualityDegrading(
    SpeechRecognizer sender,
    SpeechRecognitionQualityDegradingEventArgs args)
{
    dispatcherQueue.TryEnqueue(() =>
    {
        // Show a message or indicator to the user.
        // args.Problem identifies the specific audio quality issue.
        switch (args.Problem)
        {
            case SpeechRecognitionAudioProblem.TooFast:
                statusTextBlock.Text = "Try speaking more slowly.";
                break;
            case SpeechRecognitionAudioProblem.TooSlow:
                statusTextBlock.Text = "Try speaking a bit faster.";
                break;
            case SpeechRecognitionAudioProblem.TooQuiet:
                statusTextBlock.Text = "Try speaking louder or move closer to the microphone.";
                break;
            case SpeechRecognitionAudioProblem.TooLoud:
                statusTextBlock.Text = "Try speaking more quietly or move farther from the microphone.";
                break;
            case SpeechRecognitionAudioProblem.TooNoisy:
                statusTextBlock.Text = "Background noise is interfering with recognition. Try a quieter environment.";
                break;
            case SpeechRecognitionAudioProblem.None:
            default:
                statusTextBlock.Text = "";
                break;
        }
    });
}

Para usar este handler, subscreva o evento após criar o seu recognizer:

speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;

Considerações sobre o tópico da interface

No WinUI 3, use DispatcherQueue em vez de CoreDispatcher para encaminhar chamadas para a thread da IU. Obtenha uma referência para o DispatcherQueue da thread atual no construtor da sua página ou na lógica de inicialização:

private Microsoft.UI.Dispatching.DispatcherQueue dispatcherQueue =
    Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();

Depois, usa dispatcherQueue.TryEnqueue(...) nos teus processadores de eventos para atualizar com segurança os elementos da interface do utilizador.