Gérer les problèmes liés à l’entrée audio

Découvrez comment gérer les problèmes de qualité des entrées audio lors de la reconnaissance vocale dans votre application SDK d'application Windows.

Important

La reconnaissance vocale nécessite l’identité du package MSIX. Les Windows.Media.SpeechRecognition API sont disponibles uniquement lorsque votre application s’exécute avec une identité de package (empaquetée ou empaquetée avec un emplacement externe). Les applications non empaquetées ne peuvent pas utiliser ces API.

API clés

Aperçu

La qualité d’entrée audio peut affecter la précision de la reconnaissance vocale. Le bruit d’arrière-plan, les microphones étouffés et le faible volume sont des causes courantes de l’échec de la reconnaissance. Gérez l’événement RecognitionQualityDegrading pour informer l’utilisateur quand la qualité audio peut empêcher la reconnaissance précise.

Gérer la dégradation de la qualité

L’événement RecognitionQualityDegrading se déclenche lorsque des problèmes audio peuvent interférer avec la reconnaissance vocale. Utilisez la SpeechRecognitionQualityDegradingEventArgs.Problem propriété pour déterminer le problème spécifique.

Étant donné que cet événement se déclenche sur un thread d’arrière-plan, utilisez DispatcherQueue.TryEnqueue pour mettre à jour l’interface utilisateur :

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;
        }
    });
}

Pour utiliser ce gestionnaire, abonnez-vous à l’événement après avoir créé votre module de reconnaissance :

speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;

Considérations relatives aux threads d’interface utilisateur

Dans WinUI 3, utilisez DispatcherQueue au lieu de CoreDispatcher pour transférer les appels vers le thread d’interface utilisateur. Obtenez une référence à DispatcherQueue pour le thread actuel dans le constructeur de votre page ou dans votre logique d’initialisation :

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

dispatcherQueue.TryEnqueue(...) Utilisez ensuite dans vos gestionnaires d’événements pour mettre à jour en toute sécurité les éléments de l’interface utilisateur.