我开始研究一个 VOIP 程序来学习一些 VOIP 的基础知识。我大部分时间都在工作,但是在我将系统转换为使用 WaveMixerStream32 后遇到了问题。
我的程序使用 16 位波形格式从 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);
虽然它比我原来的效果好得多,但最终音频的音高比输入要深得多。
我做错了什么/我该如何解决?