Partager via


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

Découvrez comment gérer les problèmes liés à la précision de la reconnaissance vocale causée par la qualité de l’entrée audio.

API importantes : SpeechRecognizer, RecognitionQualityDegrading, SpeechRecognitionAudioProblem

Évaluer la qualité de l’entrée audio

Lorsque la reconnaissance vocale est active, utilisez l’événement RecognitionQualityDegrading de votre module de reconnaissance vocale pour déterminer si un ou plusieurs problèmes audio peuvent interférer avec l’entrée vocale. L’argument d’événement (SpeechRecognitionQualityDegradEventArgs) fournit la propriété Problem, qui décrit les problèmes détectés avec l’entrée audio.

La reconnaissance peut être affectée par trop de bruit d’arrière-plan, un microphone désactivé et le volume ou la vitesse du haut-parleur.

Ici, nous configurons un module de reconnaissance vocale et commençons à écouter l’événement RecognitionQualityDegrading .

private async void WeatherSearch_Click(object sender, RoutedEventArgs e)
{
    // Create an instance of SpeechRecognizer.
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // Listen for audio input issues.
    speechRecognizer.RecognitionQualityDegrading += speechRecognizer_RecognitionQualityDegrading;

    // Add a web search grammar to the recognizer.
    var webSearchGrammar = new Windows.Media.SpeechRecognition.SpeechRecognitionTopicConstraint(Windows.Media.SpeechRecognition.SpeechRecognitionScenario.WebSearch, "webSearch");


    speechRecognizer.UIOptions.AudiblePrompt = "Say what you want to search for...";
    speechRecognizer.UIOptions.ExampleText = "Ex. 'weather for London'";
    speechRecognizer.Constraints.Add(webSearchGrammar);

    // Compile the constraint.
    await speechRecognizer.CompileConstraintsAsync();

    // Start recognition.
    Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();
    //await speechRecognizer.RecognizeWithUIAsync();

    // Do something with the recognition result.
    var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
    await messageDialog.ShowAsync();
}

Gérer l’expérience de reconnaissance vocale

Utilisez la description fournie par la propriété Problem pour aider l’utilisateur à améliorer les conditions de reconnaissance.

Ici, nous créons un gestionnaire pour l’événement RecognitionQualityDegrading qui recherche un niveau de volume faible. Nous utilisons ensuite un objet SpeechSynthesizer pour suggérer que l’utilisateur essaie de parler plus fort.

private async void speechRecognizer_RecognitionQualityDegrading(
    Windows.Media.SpeechRecognition.SpeechRecognizer sender,
    Windows.Media.SpeechRecognition.SpeechRecognitionQualityDegradingEventArgs args)
{
    // Create an instance of a speech synthesis engine (voice).
    var speechSynthesizer =
        new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

    // If input speech is too quiet, prompt the user to speak louder.
    if (args.Problem == Windows.Media.SpeechRecognition.SpeechRecognitionAudioProblem.TooQuiet)
    {
        // Generate the audio stream from plain text.
        Windows.Media.SpeechSynthesis.SpeechSynthesisStream stream;
        try
        {
            stream = await speechSynthesizer.SynthesizeTextToStreamAsync("Try speaking louder");
            stream.Seek(0);
        }
        catch (Exception)
        {
            stream = null;
        }

        // Send the stream to the MediaElement declared in XAML.
        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () =>
        {
            this.media.SetSource(stream, stream.ContentType);
        });
    }
}

Exemples