學習如何在 Windows 應用程式 SDK 應用程式中處理語音辨識時的音訊輸入品質問題。
Important
語音辨識需要 MSIX 套件的識別碼。
Windows.Media.SpeechRecognition這些 API 只有在你的應用程式以套件身份(打包或以外部位置打包)執行時才可用。 未封裝的應用程式無法使用這些 API。
主要 API
概觀
音訊輸入品質會影響語音辨識的準確度。 背景噪音、麥克風悶音和音量過低是辨識失敗的常見原因。 處理 RecognitionQualityDegrading 事件,讓使用者了解音訊品質可能導致無法準確辨識。
因應品質劣化
當音訊問題可能干擾語音辨識時,該 RecognitionQualityDegrading 事件會觸發。 使用 SpeechRecognitionQualityDegradingEventArgs.Problem 屬性來判斷具體問題。
因為此事件會在背景執行緒上觸發,請使用 DispatcherQueue.TryEnqueue 更新 UI:
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;
}
});
}
若要使用這個處理常式,請在建立辨識器後,訂閱此事件:
speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;
使用者介面執行緒注意事項
在 WinUI 3 中,請使用 DispatcherQueue 而非 CoreDispatcher,將呼叫封送處理至 UI 執行緒。 在頁面建構函式或初始化邏輯中,取得目前執行緒中 DispatcherQueue 的參考:
private Microsoft.UI.Dispatching.DispatcherQueue dispatcherQueue =
Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();
然後在事件處理常式中使用 dispatcherQueue.TryEnqueue(...),以安全地更新 UI 元素。