SetInputToAudioStream に指定する Stream は Length が適切に返される必要がある

SpeechRecognitionEngine.SetInputToAudioStream(Stream, SpeechAudioFormatInfo) メソッドは、 指定したストリームを音声認識の対象にするメソッドです。

ところが指定した Stream が読み取りが可能であっても、Length(プロパティによる実装)の値が適切に取得できない場合は、 メソッドを実行した段階で「NotSupportedException (指定されたメソッドはサポートされていません)」を通知します。

試しに Length が 0 を返すような Stream のラッパークラスを用意して実験しましたが、 他のプロパティなどは SetInputToAudioStream から参照されていないようです。 なお Length が 0 のとき、音声認識を開始することはできますが認識処理自体は実行されません。

System.Speech での情報です。Microsoft.Speech の場合には、ここで紹介する問題が起きていないことを確認しています。

マイク入力などの場合には SetInputToDefaultAudioDevice を利用する

マイク入力などのストリームを利用したい場合にその Length プロパティ が 0 であるなら、 SetInputToDefaultAudioDevice メソッドを利用することで問題を強引に回避できる可能性があります。 つまり OS の設定で、標準のマイク入力を利用したいデバイスに設定しておき、 プログラムでは DefaultAudioDevice を入力として利用するようにします。

用意された SDK や API から取得できる Stream の Length が NotSupportedException などを返す場合に、 この方法が利用できる可能性があります。