3

What is the "standard way" of working with 24-bit audio? Well, there are no 24-bit data types available, really. Here are the methods that come into my mind:

  1. Represent 24-bit audio samples as 32-bit ints and ignore the upper eight bits.
  2. Just like (1) but ignore the lower eight bits.
  3. Represent 24-bit audio samples as 32-bit floats.
  4. Represent the samples as structs of 3 bytes (acceptable for C/C++, but bad for Java).

How do you work this out?

4

1 回答 1

4

将它们存储为 32 位或 64 位signed intfloat或者double除非您有空间意识并关心将它们打包到尽可能小的空间中。

音频样本通常以 24 位的形式出现在音频硬件中,因为这通常是 DAC 和 ADC 的分辨率 - 尽管在大多数计算机硬件上,如果发现 4 位中的底部 3 位随机出现噪声,请不要感到惊讶。

数字信号处理操作——这通常发生在样本采集的下游——都涉及样本加权和的加法。以整数类型存储的样本可以被认为是定点二进制,在某个任意点具有隐含的二进制点 - 您可以策略性地选择其位置以保持尽可能多的精度。

例如,两个 24 位整数的和产生 25 位的结果。在 8 次这样的加法之后,32 位类型会溢出,您需要通过舍入和右移来重新规范化。

因此,如果您使用整数类型来存储样本,请尽可能使用最大的类型,并从最低有效 24 位的样本开始。

浮点类型当然会为您处理这个细节,尽管您对何时发生重整化的选择较少。在有硬件支持的情况下,它们是音频处理的常用选择。单精度float具有 24 位尾数,因此可以保持 24 位样本而不会损失精度。

通常浮点样本存储在 range 中-1.0f < x < 1.0f

于 2013-07-05T13:59:58.683 回答