【问题标题】:Correctly decoding/encoding raw PCM data正确解码/编码原始 PCM 数据
【发布时间】:2012-07-04 17:45:58
【问题描述】:

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

渠道:

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

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

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

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

采样率:

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

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

【问题讨论】:

  • 问题更适合dsp.stackexchange.com
  • 我假设你的意思是 44100 赫兹到 22050 赫兹?
  • 为了将来参考,您可以随时点击上面的| edit | 链接并修复您的问题中的拼写错误和其他错误

标签: audio frequency wave resampling


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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 2013-07-29
    • 2018-10-12
    • 2020-01-01
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多