Správa problémů se vstupem zvuku

Naučte se zpracovávat problémy s kvalitou zvukového vstupu během rozpoznávání řeči v aplikaci Windows App SDK.

Important

Rozpoznávání řeči vyžaduje identitu balíčku MSIX. Rozhraní API Windows.Media.SpeechRecognition jsou dostupná pouze když vaše aplikace běží s identitou balíčku (v balíčku nebo v balíčku s externím umístěním). Nevybalené aplikace nemůžou tato rozhraní API používat.

Klíčová rozhraní API

Přehled

Kvalita vstupu zvuku může ovlivnit přesnost rozpoznávání řeči. Příčinou selhání rozpoznávání jsou šum na pozadí, změklé mikrofony a nízká hlasitost. RecognitionQualityDegrading Při zpracování události dejte uživateli vědět, kdy kvalita zvuku může zabránit přesnému rozpoznávání.

Řešení zhoršení kvality

Událost RecognitionQualityDegrading se vyvolá, když problémy se zvukem mohou narušovat rozpoznávání řeči. SpeechRecognitionQualityDegradingEventArgs.Problem Pomocí vlastnosti určete konkrétní problém.

Vzhledem k tomu, že se tato událost aktivuje ve vlákně na pozadí, použijte DispatcherQueue.TryEnqueue k aktualizaci uživatelského rozhraní:

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

Chcete-li použít tuto obslužnou funkci, zaregistrujte se k události po vytvoření rozpoznávače:

speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;

Důležité informace o vláknech uživatelského rozhraní

Ve WinUI 3 použijte DispatcherQueue místo CoreDispatcher k předávání volání do vlákna uživatelského rozhraní. Získejte odkaz na DispatcherQueue pro aktuální vlákno v konstruktoru stránky nebo v inicializační logice:

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

Pak můžete v obslužných rutinách událostí použít dispatcherQueue.TryEnqueue(...), abyste mohli bezpečně aktualizovat prvky uživatelského rozhraní.