Hantera problem med ljudingång

Lär dig hur du hanterar problem med ljudinmatningskvalitet under taligenkänning i din Windows App SDK app.

Important

Taligenkänning kräver MSIX-paketidentitet. Windows.Media.SpeechRecognition-API:erna är endast tillgängliga när din app körs med paketidentitet (paketerad eller paketerad med extern plats). Uppackade appar kan inte använda dessa API:er.

Nyckel-API:er

Översikt

Ljudinmatningskvaliteten kan påverka taligenkänningens noggrannhet. Bakgrundsbrus, dämpade mikrofoner och låg volym är vanliga orsaker till igenkänningsfel. Hantera händelsen RecognitionQualityDegrading för att meddela användaren när ljudkvaliteten kan förhindra korrekt igenkänning.

Hantera kvalitetsförsämring

Händelsen RecognitionQualityDegrading utlöses när ljudproblem kan störa taligenkänningen. Använd egenskapen SpeechRecognitionQualityDegradingEventArgs.Problem för att fastställa det specifika problemet.

Eftersom den här händelsen utlöses i en bakgrundstråd använder du DispatcherQueue.TryEnqueue för att uppdatera användargränssnittet:

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

Om du vill använda den här hanteraren prenumererar du på händelsen när du har skapat din identifierare:

speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;

Överväganden för användargränssnittstråd

I WinUI 3 använder du DispatcherQueue i stället för CoreDispatcher att konvertera anrop till användargränssnittstråden. Hämta en referens till DispatcherQueue för den aktuella tråden i sidkonstruktorn eller initieringslogik:

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

Använd dispatcherQueue.TryEnqueue(...) sedan i händelsehanterarna för att på ett säkert sätt uppdatera användargränssnittselement.