Microsoft Speechとストリーミングオーディオ

画像



Microsoft Speechが音声をどの程度認識できるかが興味深いものになりました。 認識の情報源として、私はyouarelistening.toから警察の講演の音声ストリームを取得することにしました。



System.SpeechとMicrosoft.Speechの2つの名前空間があります。 私が理解しているように、Microsoft.Speechを使用するには、Microsoft Speech Platform RuntimeとMicrosoft Speech Platform SDKをインストールする必要があります。 また、System.Speechは既に.NET Frameworkの最新バージョンに含まれています。



System.Speechを使用します。 この場合、ディクテーションはサポートされていますが、Microsoft.Speechの場合はありません。



NAudioサウンドを操作するためのライブラリも必要です。 ストリーミングオーディオで動作できるMp3StreamingDemoの例があります。 彼が必要です。 独自のプロジェクトを作成します。 MP3StreamingPanelから、StreamMp3メソッドと必要なすべてのものをドラッグアンドドロップします。 NAudioへのリンクを追加します。



このクラスでは、別のストリームでStreamMp3を開始するStartStreamingメソッドを作成します。



public void StartStreaming() { playbackState = StreamingPlaybackState.Buffering; bufferedWaveProvider = null; ThreadPool.QueueUserWorkItem(StreamMp3, "http://relay.broadcastify.com:80/949398448"); }
      
      





クラスのコンストラクターはSpeechRecognitionEngineを作成および構成します。ディクテーションを文法として使用します。



  private bool completed = true; readonly SpeechRecognitionEngine sre = new SpeechRecognitionEngine(); public Recognition() { var grammarBuilder = new GrammarBuilder(); grammarBuilder.Culture = new CultureInfo("en-Gb"); grammarBuilder.AppendDictation(); var grammar = new Grammar(grammarBuilder); grammar.Enabled = true; sre.LoadGrammar(grammar); sre.BabbleTimeout = TimeSpan.FromHours(1); sre.EndSilenceTimeout = TimeSpan.FromSeconds(10); sre.InitialSilenceTimeout = TimeSpan.FromSeconds(10); sre.SpeechRecognized += sre_SpeechRecognized; sre.RecognizeCompleted += sre_RecognizeCompleted; }
      
      





データをバッファーからMemoryStreamにコピーし、SetInputToAudioStreamに渡します。 ここでは、オーディオ形式のパラメーターを正しく設定する必要があります。 SetInputToWaveStreamメソッドは機能しませんでした。



  public void Recognize() { var size = bufferedWaveProvider.BufferLength; byte[] bytes = new byte[size]; bufferedWaveProvider.Read(bytes, 0, size); using (var ms = new MemoryStream(bytes)) { sre.SetInputToAudioStream(ms, new SpeechAudioFormatInfo( bufferedWaveProvider.WaveFormat.SampleRate, AudioBitsPerSample.Sixteen, AudioChannel.Mono)); sre.RecognizeAsync(RecognizeMode.Multiple); while (!completed) { Thread.Sleep(333); } } } void sre_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e) { Debug.WriteLine("Finished"); completed = true; } private static void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { Console.WriteLine(e.Result.Text); }
      
      





完成したフラグとThread.Sleepを使用したループを使用した操作は、Speech APIドキュメントから取得しました。 何らかの理由で、このループなしでは認識は行われません。



借りたStreamMp3メソッドを変更する必要があります。 バッファがほぼいっぱいになるとすぐに、そこからデータを読み取ります。



  if (IsBufferNearlyFull) { Debug.WriteLine("Buffer getting full, taking a break"); if (completed) { completed = false; Recognize(); } Thread.Sleep(200); }
      
      





そして、あなたは実行することができます:



  private static void Main(string[] args) { var recognition = new Recognition(); recognition.StartStreaming(); Console.ReadKey(); }
      
      





もちろん、出力はまったくナンセンスです。



認識結果
政治的に志向したミチオの角にいるカナダ人IRAのエンジニア

それと

考えた

それは私が感じていたことができます

彼女は持っていた

持っていた

彼女彼女彼女

彼女

どのカテゴリーのゴールキーパーでも:彼は気楽に誰も適切な本当のeを含めません

あなたがたはできない

彼女の家でのホリデーパーティーでの試みは、他のE.

tは1つについてリードしますが、9つかかる場合があります

マネージャーのグレームにラインナップがたくさん揃っています

生産性を高める

すべての法的

間違いなく合法的にそれを伝えるとすぐに追加されました

直射日光下で飛行能力を発揮するとき

同盟で不運な建物

失敗した人に沿ってイニシアチブコミッショナーカット大臣1月15

イングランドのマネージャー、クライヴを執着させなければならない効果

イタリアン・イタリアン・オープン

移植の関係

パートナー改行

彼らは計画を生きている可能性が高いが、改行

エディーはそれから資格を与えて、それは行きませんでした

ベッドで13の子供と子供のアルティマの間にローカルで彼らのキャンペーンを知っています。



砂糖で覆われた議題についての有効化情報

それは幸運にも百万を伴いました

英語は彼女を許した

ラインカーナインエディター

あります

彼女が理解するすべては、彼が9ポイントのオーバーホールされた理解を不満にするかどうか不平を言います

率直に言って

それはタッチラインがラナークシャーの急性疾患カバーtをプレイするかどうかが不可欠です



しかし、精査の下で彼らの人生のために幸運なことに実質的にライトを降りる

変更された内部まで

ラテン系アメリカ人



結論:




All Articles