0

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

渠道:

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

  1. 我只从一个通道(哪个通道?1 还是 2?)获取数据?
  2. 还是我从通道 1 和 2 中取平均值作为单声道。

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

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

采样率:

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

  1. 我是否只需为新的(较低频率)值取 2 个连续样本的平均值?
  2. 还有更多的科学算法吗?
4

1 回答 1

1
  • 立体声到单声道 - 取左右样本的平均值,即M = (L + R) / 2- 这适用于绝大多数立体声内容,但请注意,在极少数情况下您可以获得左/右消除。

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

  • 重采样 - 对于上面示例中的简单整数比率下采样,过程是:

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

Note that there are third party libraries such as libsamplerate which can handle resampling for you in the general case, so if you have more than one ratio you need to support, or you have some tricky non-integer ratio, then this might be a better approach

于 2012-07-04T09:08:24.773 回答