VOIP の基本を学ぶために、VOIP プログラムの作成に取り組み始めました。ほとんど動作していましたが、WaveMixerStream32 を使用するようにシステムを変換した後、問題が発生しました。
私のプログラムは、16 ビットの Wave 形式を使用して WaveIn から入力を読み取り、Speex コーデックで圧縮して、クライアントにリレーされるネットワーク経由で送信します。最初は、BufferedWaveProvider を間違って使用していたため、WaveMixerStream32 の使用を検討しました。ただし、これを使用するには、BufferedWaveProvider を WaveStream32 に変換する必要がありました。これを WaveMixerStream32 で使用できるようにします。
変換に使用しているコードは次のとおりです。
provider = new BufferedWaveProvider(format) { DiscardOnBufferOverflow = true };
wave16ToFloat = new Wave16ToFloatProvider(provider); // I have tried with and without this converter.
wpws = new WaveProviderToWaveStream(wave16ToFloat);
channel = new WaveChannel32(wpws);
This Questionから IWaveProvider から WaveStream へのコンバーターを取得しました。
次に、最終ストリームを次のように WaveMixerStream32 に追加します。
waveMixer.AddInputStream(channel);
元のオーディオよりもはるかにうまく機能しますが、最終的なオーディオのピッチは入力よりもかなり深くなります。
何が間違っているのですか / どうすれば修正できますか?