2012-07-04 109 views
0

我正在用C++编写我的WAVE解码器/编码器。我设法正确地在不同的样本大小(8,16和32)之间进行转换,但我需要一些关于通道和频率的帮助。正确解码/编码原始PCM数据

渠道:

如果我想从立体声转换为单声道:(?哪一个呢?1或2)

  1. 我只是从一个通道取数据?
  2. 还是我从单声道的声道1和2中取平均值。

如果我想从单声道转换为立体声: (我知道这是不是很科学)

  1. 我可以简单地从单一渠道到两个立体声道加样?
  2. 有没有更科学的方法来做到这一点(例如:插值)?

采样率:

如何改变采样率(重采样),例如:从44100赫兹到22050赫兹:

  1. 我随便拿2个连续的平均新(低频)值的样本?
  2. 有没有更多的科学算法呢?
+1

问题更适合于http:// dsp。 stackexchange.com –

+1

我假设你的意思是44100 Hz到22050 Hz? –

+0

是的,很抱歉,这是22050 – goocreations

回答

1
  • 立体声到单声道 - 采取左,右样本的平均值,即M = (L + R)/2 - 这适用于绝大多数的立体声内容,但要注意,有一些罕见的情况下,你可以在那里左/正确的取消。

  • 单声道立体声 - 把单样品中左和右信道,即L = R = M - 这给出了当立体声播放

  • 再采样该中心的声象 - 为一个简单的整数比的下采样在您的示例上述过程是:

    • 低通滤波器,以适应新奈奎斯特频率,例如10千赫LPF为22.05 kHz的采样率
    • 抽取所要求的比(即下降交替的抽样为您的2倍下采样实施例)

注意,有第三方库如libsamplerate它能够处理的二次采样你在一般情况下,所以如果你需要支持多个比率,或者你有一些棘手的非整数比率,那么这可能是一个更好的方法

相关问题