私は現在、特定のオーディオ形式にエンコードされた音声の送信を必要とするアプリケーションに取り組んでいます。
System.Speech.AudioFormat.SpeechAudioFormatInfo synthFormat =
new System.Speech.AudioFormat.SpeechAudioFormatInfo(System.Speech.AudioFormat.EncodingFormat.Pcm,
8000, 16, 1, 16000, 2, null);
これは、オーディオがPCM形式、1秒あたり8000サンプル、1サンプルあたり16ビット、モノラル、1秒あたり平均16000バイト、2のブロックアライメントであることを示しています。
次のコードを実行しようとすると、MemoryStreamインスタンスに何も書き込まれません。ただし、毎秒8000サンプルから11025まで変更すると、オーディオデータは正常に書き込まれます。
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
waveStream = new MemoryStream();
PromptBuilder pbuilder = new PromptBuilder();
PromptStyle pStyle = new PromptStyle();
pStyle.Emphasis = PromptEmphasis.None;
pStyle.Rate = PromptRate.Fast;
pStyle.Volume = PromptVolume.ExtraLoud;
pbuilder.StartStyle(pStyle);
pbuilder.StartParagraph();
pbuilder.StartVoice(VoiceGender.Male, VoiceAge.Teen, 2);
pbuilder.StartSentence();
pbuilder.AppendText("This is some text.");
pbuilder.EndSentence();
pbuilder.EndVoice();
pbuilder.EndParagraph();
pbuilder.EndStyle();
synthesizer.SetOutputToAudioStream(waveStream, synthFormat);
synthesizer.Speak(pbuilder);
synthesizer.SetOutputToNull();
8000のサンプルレートを使用したときに記録された例外やエラーはなく、SetOutputToAudioStreamに関するドキュメントで有用なものが見つからず、8000ではなく11025サンプル/秒で成功する理由があります。wavファイルを含む回避策があります。いくつかのサウンド編集ツールを使用して生成され、正しいサンプルレートに変換されましたが、可能であれば、アプリケーション内からオーディオを生成したいと思います。
特に興味深い点の1つは、SpeechRecognitionEngineがそのオーディオ形式を受け入れ、合成されたWaveファイル内の音声を正常に認識したことです...
更新:最近、このオーディオ形式はインストールされている特定の音声では成功しますが、他の音声では失敗することがわかりました。特にLHMichaelとLHMichelleで失敗し、PromptBuilderで定義された特定の音声設定で失敗が異なります。