Verwalten von Problemen mit der Audioeingabe

Erfahren Sie, wie Sie Probleme mit der Genauigkeit der Spracherkennung verwalten, die durch die Audioeingabequalität verursacht wird.

Wichtige APIs: SpeechRecognizer, RecognitionQualityDegrading, SpeechRecognitionAudioProblem

Bewerten der Audioeingabequalität

Wenn die Spracherkennung aktiv ist, verwenden Sie das RecognitionQualityDegrading-Ereignis Ihrer Spracherkennung, um festzustellen, ob ein oder mehrere Audioprobleme die Spracheingabe beeinträchtigen können. Das Ereignisargument (SpeechRecognitionQualityDegradingEventArgs) stellt die Problem-Eigenschaft bereit, die die probleme beschreibt, die mit der Audioeingabe erkannt wurden.

Die Erkennung kann durch zu viel Hintergrundgeräusche, ein stummgeschaltetes Mikrofon und die Lautstärke oder Geschwindigkeit des Lautsprechers beeinflusst werden.

Hier konfigurieren wir eine Spracherkennung und beginnen mit der Überwachung des RecognitionQualityDegrading-Ereignisses.

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

Verwalten der Spracherkennungsfunktion

Verwenden Sie die von der Problemeigenschaft bereitgestellte Beschreibung, um dem Benutzer zu helfen, die Bedingungen für die Erkennung zu verbessern.

Hier erstellen wir einen Handler für das RecognitionQualityDegrading-Ereignis , das auf eine niedrige Volumeebene überprüft. Wir verwenden dann ein SpeechSynthesizer-Objekt , um vorzuschlagen, dass der Benutzer lauter spricht.

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

Beispiele