Administración de problemas con la entrada de audio

Obtenga información sobre cómo controlar los problemas de calidad de entrada de audio durante el reconocimiento de voz en la aplicación SDK de Aplicaciones para Windows.

Importante

El reconocimiento de voz requiere la identidad del paquete MSIX. Las API Windows.Media.SpeechRecognition solo están disponibles cuando la aplicación se ejecuta con identidad de paquete (empaquetada o empaquetada con una ubicación externa). Las aplicaciones sin empaquetar no pueden usar estas API.

APIs clave

Visión general

La calidad de entrada de audio puede afectar a la precisión del reconocimiento de voz. El ruido de fondo, los micrófonos silenciados y el bajo volumen son causas comunes de errores de reconocimiento. Controle el RecognitionQualityDegrading evento para que el usuario sepa cuándo la calidad del audio puede impedir el reconocimiento preciso.

Controlar la degradación de la calidad

El RecognitionQualityDegrading evento se desencadena cuando los problemas de audio pueden interferir con el reconocimiento de voz. Use la SpeechRecognitionQualityDegradingEventArgs.Problem propiedad para determinar el problema específico.

Dado que este evento se desencadena en un subproceso en segundo plano, use DispatcherQueue.TryEnqueue para actualizar la interfaz de usuario:

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 controlador, suscríbase al evento después de crear el reconocedor:

speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;

Consideraciones sobre el hilo de la interfaz de usuario

En WinUI 3, use DispatcherQueue en lugar de CoreDispatcher para canalizar las llamadas al subproceso de la interfaz de usuario. Obtenga una referencia al DispatcherQueue para el hilo actual en el constructor de la página o en el código de inicialización:

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

A continuación, use dispatcherQueue.TryEnqueue(...) en los controladores de eventos para actualizar de forma segura los elementos de la interfaz de usuario.