已转换为在WaveMixerStream32中使用的BufferedWaveProvider降低了音频的音调

本文关键字:BufferedWaveProvider 音频 转换 WaveMixerStream32 | 更新日期: 2023-09-27 18:29:10

我开始编写一个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);

我从这个问题中得到了IWaveProvider到WaveStream的转换器。

然后,我将最终流添加到WaveMixerStream32中,如下所示:

waveMixer.AddInputStream(channel);

虽然它比我原来的效果要好得多,但最终音频的音高比输入要深得多。

我做错了什么/我该怎么办?

已转换为在WaveMixerStream32中使用的BufferedWaveProvider降低了音频的音调

很可能您正在播放立体声音频,就好像它是单声道的一样。这将使球场减半。检查WaveFormat在信号链中的每个点中是否具有预期值。请注意,WaveChannel32将把单声道转换为立体声。

在遵循Mark和Hans的答案并修改采样率后,我发现我的WaveOutput预期的采样率为44.1kHz,而我只给出了32kHz。我最初将WaveIn采样率设置为32kHz,因为我预计我的编解码器Speex需要该采样率才能正常工作(它的采样率设置仅高达32kHz)。然而,在将WaveIn采样率更改为44.1kHz后,所有音调问题都消失了。

相关文章:
  • 没有找到相关文章