Gerenciar problemas com entrada de áudio

Saiba como lidar com problemas de qualidade de entrada de áudio durante o reconhecimento de fala em seu aplicativo SDK do Aplicativo Windows.

Importante

O reconhecimento de fala requer a identidade do pacote MSIX. As APIs Windows.Media.SpeechRecognition estão disponíveis apenas quando seu aplicativo é executado com identidade de pacote (empacotado ou empacotado com localização externa). Aplicativos não empacotados não podem usar essas APIs.

APIs de chave

Visão geral

A qualidade da entrada de áudio pode afetar a precisão do reconhecimento de fala. Ruído de plano de fundo, microfones abafados e baixo volume são causas comuns de falha de reconhecimento. Manipule o RecognitionQualityDegrading evento para informar ao usuário quando a qualidade do áudio pode impedir o reconhecimento preciso.

Lidar com a degradação da qualidade

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

Como esse evento é acionado em um thread em segundo plano, use DispatcherQueue.TryEnqueue para atualizar a interface do usuário:

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 esse manipulador, assine o evento depois de criar o reconhecedor:

speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;

Considerações sobre a thread da interface do usuário

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

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

Em seguida, use dispatcherQueue.TryEnqueue(...) em seus manipuladores de eventos para atualizar com segurança os elementos da interface do usuário.