.NET の System.Speech SpeechRecognitionEngine オブジェクトを使用して、不和ユーザーが音声チャネルで話した言葉を認識しようとしています。ボットが受信した生の pcm オーディオは MemoryStream に書き込まれ、SpeechRecognitionEngine がこのストリームを認識に使用できるようにしようとしています。このデータの取得と書き込みは正常に機能しますが、SpeechRecognitionEngine での使用は複数の理由で機能しないようです。1 つは、ストリームが無限ではなく、認識エンジンがストリームの最後に到達し、単語が発話される前に停止することです。データが常にストリームに追加されている (つまり、ユーザーが話し続けている) 場合でも、レコグナイザーはストリームの最後に到達し、続行を拒否します。もう 1 つの問題は、認識を実行するメソッドが複数回実行できないように見えることです。私' ストリームをチャンクで認識エンジンに供給しようとしましたが、うまくいかなかったようです。入力をデフォルトのオーディオデバイスに設定するオプションがあり、それは私が望むとおりに機能し、ユーザーが入力を提供しなくても常に実行され、停止しません。何か助けはありますか?
private SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
public MemoryStream stream = new MemoryStream();
//called before any other method when the bot joins the voice channel
public void StartRun(){
Choices commands = new Choices();
commands.Add(new string[] { "hello", "hey bot"});
GrammarBuilder gBuilder = new GrammarBuilder();
gBuilder.Append(commands);
Grammar grammar = new Grammar(gBuilder);
recognizer.LoadGrammar(grammar);
recognizer.SetInputToAudioStream(holdStream, new SpeechAudioFormatInfo(48000, AudioBitsPerSample.Sixteen, AuidoChannel.Mono));
recognizer.SpeechRecognized += async (s, e) => {} //handles
//the eventHandler i have for this event prints something whenever it reaches the end of the stream
recognizer.RecognizeCompleted += RecognizeCompleted;
recognizer.RecognizeAsync(RecognizeMode.Multiple);
}
別のプログラムでは、pcm データを「ストリーム」に書き込みます。構文エラーがある場合は、コードを単純化するためにコピーして貼り付けるのではなく、コードを手動でコピーしたことが原因です。ありがとうございました!