处理 24 位音频的“标准方式”是什么?好吧,真的没有可用的 24 位数据类型。以下是我想到的方法:
- 将 24 位音频样本表示为 32 位整数并忽略高八位。
- 与 (1) 类似,但忽略低八位。
- 将 24 位音频样本表示为 32 位 float 。
- 将示例表示为 3 字节的结构(对于 C/C++ 可接受,但对于 Java 不利)。
你是如何解决这个问题的?
最佳答案
将它们存储为 32 位或 64 位 signed int
s 或 float
或 double
除非您有空间意识并且关心将它们打包到尽可能小的空间中。
音频样本通常显示为 24 位进出音频硬件,因为这通常是 DAC 和 ADC 的分辨率 - 尽管在大多数计算机硬件上,如果发现 4 位中的低 3 位随机出现,请不要感到惊讶有噪音。
数字信号处理操作(通常发生在样本采集的下游)都涉及样本加权和的相加。以整数类型存储的样本可以被认为是定点二进制,在任意点有一个隐含的二进制小数点——您可以策略性地选择该位置以保持尽可能多的精度。
例如,两个 24 位整数的总和产生 25 位的结果。在 8 次这样的添加之后,32 位类型将溢出,您将需要通过四舍五入和右移重新归一化。
因此,如果您使用整数类型来存储样本,请使用最大的整数类型,并从最低有效 24 位开始。
浮点类型当然会为您处理这些细节,尽管您对何时进行重规范化的选择较少。在硬件支持可用的情况下,它们是音频处理的通常选择。单精度float
有一个 24 位尾数,因此可以在不损失精度的情况下保存 24 位样本。
通常浮点样本存储在 -1.0f < x < 1.0f
范围内.
关于audio - 使用 24 位音频样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17489158/