1

C# と .Net 4.5 を使用しています

Microsoft Speech Recognition Engine に渡した MemoryStream がありますが、ストリームを認識できない場合。

問題は、音声認識がアクセスしている間に別のスレッドによってストリームが書き込まれることです。 Stream.synchronized(stream) オブジェクトを音声認識に渡したので、アクセス自体は問題ではなく、スレッドセーフです。位置ポインタに問題があると思います。もちろん、ポインターは、スレッド 1 がストリームに書き込んだ新しく書き込まれたデータの末尾にあります。そのため、スレッド 1 は常にポインターを最後に書き込んでプッシュし、その結果、ポインターは常にストリーム内の最後の要素を指します。認識エンジンであるスレッド 2 は、ポインターが最後にあるため、読み取る新しいものはないと考えます。

イメージできる唯一の解決策は、2 つの別個の位置ポインターを持つストリーム クラスから派生した新しいクラスを作成することです。1 つは書き込み用、もう 1 つは読み取り用です。

他の解決策はありますか?

よろしく、

マックス

編集:いくつかのコード:

(スレッド)

SpeechAudioFormatInfo info = new SpeechAudioFormatInfo(16000, AudioBitsPerSample.Sixteen, AudioChannel.Mono);
sre.SetInputToAudioStream(stream, info);
sre.RecognizeAsync(RecognizeMode.Multiple);

(UDP スレッド)

test.Write(messagePart, 0, messagePart.Length);
        test.Flush();
4

0 に答える 0