【问题标题】:Converting RAW 24bit Signed PCM to 32bit PCM raw将 RAW 24bit Signed PCM 转换为 32bit PCM raw
【发布时间】:2017-04-28 16:05:54
【问题描述】:

我是这里的新手。 我希望了解任何工具/快速方法来转换具有 3 字节 PCM 样本的 24 位 PCM 原始(无头)文件, 成一个 32 位 PCM 原始文件,每个样本有 4 个字节,4 字节数据的 MSByte 作为 3 字节样本的符号/零扩展。

除了 24 位原始文件,如果有帮助,我也有其对应的 WAVE 文件。

在大胆尝试时,虽然它将 24 位转换为 32 位,但它没有符号/零扩展,但它左移了 8,即 24 位样本。所以实际上 24 位样本位于 32 位的左对齐 24 位中,这不是我们想要的。

谢谢。

【问题讨论】:

  • 您是从有符号还是无符号 24 位开始? ...当我相信您的意思是左移 8 时,您还说右移 8

标签: audio pcm


【解决方案1】:

我假设您的意思是左移 8 而不是右移 8。

在这种情况下,符号扩展的概念是不必要的。假设您有一个负 24 位值 0x800000。那么左移版本将是 0x80000000。没有符号扩展,但它仍然具有正确的负号。

总之,我认为 Audacity 正在做它应该做的事情,就是简单地将位向上移动。除非出于某种原因,您的数据未签名,这将是非常不寻常的。

【讨论】:

  • 我同意,它的左移了 8,而不是右移。 Audacity 正在做应该做的事情 - 但样本的音量增加了 48dB,这是我试图避免的,而是在 32 位中使用 24 位,即 24 位在 32 位内右对齐。
  • 这是不正确的。音量不会通过增加位深度然后左移相同的位数来增加。如果您有一个正峰值为 0x7fff 的 16 位信号,即称为 0 dBFS 的参考。同样,如果您有一个正峰值为 0x7fffffff 的 32 位信号,那么这也是 0dBFS。如果您出于某种原因想要衰减信号,但不要将其与转换位深度混淆。
  • 感谢您的澄清。
【解决方案2】:

在更多搜索后,有人指出了一种方法是在 linux 上使用 sox。

sox -t s24 --endian little input.pcm -t s32 output.pcm vol 0.00390625

效果很好。 vol 0.00390625 是将音量降低 48dB,因为将原始 PCM 样本从 24 位转换为 32 位,默认情况下左移 8 位,但我希望它向下移回 8 位,即音量减少 48dB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多