Zarządzanie problemami z wejściem audio

Dowiedz się, jak obsługiwać problemy z jakością danych wejściowych audio podczas rozpoznawania mowy w aplikacji Zestaw SDK do aplikacji systemu Windows.

Ważna

Rozpoznawanie mowy wymaga tożsamości pakietu MSIX. Interfejsy API Windows.Media.SpeechRecognition są dostępne tylko wtedy, gdy aplikacja działa z identyfikatorem pakietu (spakietowana lub spakietowana z lokalizacją zewnętrzną). Aplikacje rozpakowane nie mogą używać tych interfejsów API.

Kluczowe interfejsy API

Przegląd

Jakość danych wejściowych audio może mieć wpływ na dokładność rozpoznawania mowy. Szum w tle, wyciszone mikrofony i mała głośność są typowymi przyczynami awarii rozpoznawania. Obsłuż zdarzenie RecognitionQualityDegrading, aby poinformować użytkownika, gdy jakość dźwięku może uniemożliwić dokładne rozpoznanie.

Radzenie sobie z pogorszeniem jakości

Zdarzenie RecognitionQualityDegrading jest uruchamiane, gdy problemy z dźwiękiem mogą zakłócać rozpoznawanie mowy. Użyj właściwości , SpeechRecognitionQualityDegradingEventArgs.Problem aby określić konkretny problem.

Ponieważ to zdarzenie jest wywoływane w tle, użyj DispatcherQueue.TryEnqueue, aby zaktualizować interfejs użytkownika:

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

Aby użyć tej procedury obsługi, zasubskrybuj zdarzenie po utworzeniu aparatu rozpoznawania:

speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;

Zagadnienia dotyczące wątków interfejsu użytkownika

W WinUI 3 użyj DispatcherQueue zamiast CoreDispatcher do przekazywania wywołań do wątku interfejsu użytkownika. Pobierz odwołanie do obiektu DispatcherQueue dla bieżącego wątku w konstruktorze strony lub w logice inicjalizacji:

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

Następnie użyj dispatcherQueue.TryEnqueue(...) programu obsługi zdarzeń, aby bezpiecznie zaktualizować elementy interfejsu użytkownika.