Windows アプリ SDK アプリでの音声認識中のオーディオ入力品質の問題を処理する方法について説明します。
Important
音声認識には MSIX パッケージ ID が必要です。
Windows.Media.SpeechRecognition API は、アプリがパッケージ ID (パッケージ化または外部の場所でパッケージ化) で実行されている場合にのみ使用できます。 パッケージ化されていないアプリでは、これらの API を使用できません。
主要API
Overview
音声入力の品質は、音声認識の精度に影響を与える可能性があります。 バックグラウンド ノイズ、こもったマイク、低音量は、認識エラーの一般的な原因です。
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;
UI スレッドに関する考慮事項
WinUI 3 では、UI スレッドに呼び出しをマーシャリングするには、CoreDispatcher の代わりに DispatcherQueue を使用します。 ページ コンストラクターまたは初期化ロジック内の現在のスレッドの DispatcherQueue への参照を取得します。
private Microsoft.UI.Dispatching.DispatcherQueue dispatcherQueue =
Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();
その後、イベント ハンドラーで dispatcherQueue.TryEnqueue(...) を使用して、UI 要素を安全に更新します。
関連資料
Windows developer