Verwalten von Problemen mit der Audioeingabe

Erfahren Sie, wie Sie Probleme mit der Audioeingabequalität während der Spracherkennung in Ihrer Windows App SDK-App behandeln.

Important

Für die Spracherkennung ist MSIX-Paketidentität erforderlich. Die Windows.Media.SpeechRecognition-APIs sind nur verfügbar, wenn Ihre App mit Paketidentität (verpackt oder mit externem Speicherort verpackt) ausgeführt wird. Entpackte Apps können diese APIs nicht verwenden.

Wichtige APIs

Übersicht

Die Audioeingabequalität kann sich auf die Genauigkeit der Spracherkennung auswirken. Hintergrundgeräusche, muffisierte Mikrofone und niedrige Lautstärke sind häufige Ursachen für Erkennungsfehler. Behandeln Sie das RecognitionQualityDegrading Ereignis, um dem Benutzer mitzuteilen, wann die Audioqualität möglicherweise eine genaue Erkennung verhindert.

Qualitätsminderung behandeln

Das RecognitionQualityDegrading Ereignis wird ausgelöst, wenn Audioprobleme die Spracherkennung beeinträchtigen können. Verwenden Sie die SpeechRecognitionQualityDegradingEventArgs.Problem Eigenschaft, um das spezifische Problem zu ermitteln.

Da dieses Ereignis in einem Hintergrundthread ausgelöst wird, verwenden Sie DispatcherQueue.TryEnqueue, um die Benutzeroberfläche zu aktualisieren:

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

Um diesen Handler zu verwenden, abonnieren Sie das Ereignis, nachdem Sie Ihren Recognizer erstellt haben:

speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;

Überlegungen zu UI-Thread

Verwenden Sie in WinUI 3 DispatcherQueue anstelle von CoreDispatcher, um Aufrufe an den UI-Thread zu marshallen. Rufen Sie im Seitenkonstruktor oder in der Initialisierungslogik einen Verweis auf das DispatcherQueue für den aktuellen Thread ab:

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

Verwenden Sie dispatcherQueue.TryEnqueue(...) dann in Ihren Ereignishandlern, um UI-Elemente sicher zu aktualisieren.