Gestire i problemi relativi all'input audio

Scopri come gestire i problemi relativi all'accuratezza del riconoscimento vocale causato dalla qualità dell'input audio.

API importanti: SpeechRecognizer, RecognitionQualityDegrading, SpeechRecognitionAudioProblem

Valutare la qualità dell'input audio

Quando il riconoscimento vocale è attivo, usa l'evento RecognitionQualityDegrading del riconoscimento vocale per determinare se uno o più problemi audio potrebbero interferire con l'input vocale. L'argomento evento (SpeechRecognitionQualityDegradingEventArgs) fornisce la proprietà Problem, che descrive i problemi rilevati con l'input audio.

Il riconoscimento può essere influenzato da un rumore di fondo troppo elevato, da un microfono disattivato e dal volume o dalla velocità dell'altoparlante.

In questo esempio si configura un riconoscimento vocale e si inizia a monitorare l'evento 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();
}

Gestione dell'esperienza di riconoscimento vocale

Usa la descrizione fornita dalla proprietà Problem per aiutare l'utente a migliorare le condizioni per il riconoscimento.

In questo esempio si crea un gestore per l'evento RecognitionQualityDegrading che verifica la presenza di un livello di volume basso. Si usa quindi un oggetto SpeechSynthesizer per suggerire all'utente di provare a parlare più forte.

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

Esempi