正确解码/编码原始PCM数据

时间:2012-07-04 08:37:02

标签: audio frequency wave resampling

我正在用C ++编写WAVE解码器/编码器。我已经成功地在不同的样本大小(8,16和32)之间进行了正确的转换,但是我需要一些关于频道和频率的帮助。

渠道:

如果我想从立体声转换为单声道:

  1. 我只是从一个频道获取数据(哪一个?1或2?)?
  2. 或者我是从通道1和2获取单声道的平均值。
  3. 如果我想从单声道转换为立体声: (我知道这不是很科学)

    1. 我可以简单地将单个通道中的样本添加到两个立体声通道中吗?
    2. 有更科学的方法(例如:插值)吗?
    3. 采样率:

      如何更改采样率(重采样),例如:从44100 Hz到22050 Hz:

      1. 我只是将2个连续样本的平均值作为新的(较低频率)值吗?
      2. 为此有更科学的算法吗?

1 个答案:

答案 0 :(得分:1)

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

  • 单声道到立体声 - 将单声道样本放入左右声道,即L = R = M - 这会产生一个声音图像,当播放为立体声时居中

  • 重新采样 - 对于简单的整数比率下采样,如上例所示,过程为:

    • 低通滤波器以适应新的奈奎斯特频率,例如10 kHz LPF,22.05 kHz采样率
    • 按所需比率进行抽取(即,为2x下采样示例删除替代样本)

请注意,在一般情况下,有libsamplerate等第三方库可以为您处理重新采样,因此如果您需要支持多个比率,或者您有一些棘手的非整数比率那么这可能是一种更好的方法