【发布时间】:2013-07-03 13:45:14
【问题描述】:
处理 24 位音频的“标准方式”是什么?好吧,真的没有 24 位数据类型可用。以下是我想到的方法:
- 将 24 位音频样本表示为 32 位整数并忽略高八位。
- 与 (1) 类似,但忽略低八位。
- 将 24 位音频样本表示为 32 位浮点数。
- 将样本表示为 3 个字节的结构(C/C++ 可接受,但 Java 不适用)。
你是怎么解决这个问题的?
【问题讨论】:
处理 24 位音频的“标准方式”是什么?好吧,真的没有 24 位数据类型可用。以下是我想到的方法:
你是怎么解决这个问题的?
【问题讨论】:
将它们存储为 32 位或 64 位 signed ints 或 float 或 double,除非您有空间意识并关心将它们打包到尽可能小的空间中。
音频样本通常以 24 位的形式出现在音频硬件之间,因为这通常是 DAC 和 ADC 的分辨率 - 尽管在大多数计算机硬件上,如果发现 4 位中的底部 3 位随机敲击,请不要感到惊讶有噪音。
数字信号处理操作(通常在样本采集的下游发生)都涉及样本加权和的相加。以整数类型存储的样本可以被认为是定点二进制,在某个任意点具有隐含的二进制点 - 您可以策略性地选择其位置以保持尽可能多的精度。
例如,两个 24 位整数的和产生 25 位的结果。 8 次这样的加法后,32 位类型会溢出,您需要通过舍入和右移重新归一化。
因此,如果您使用整数类型来存储样本,请尽可能使用最大的类型,并从最低有效 24 位的样本开始。
浮点类型当然会为您处理这个细节,尽管您在重整化何时发生的选择较少。在有硬件支持的情况下,它们是音频处理的常用选择。单精度float 具有 24 位尾数,因此可以保存 24 位样本而不会损失精度。
通常浮点样本存储在-1.0f < x < 1.0f 范围内。
【讨论】:
float,我认为您别无选择。整数算术中的 FFT 是非常非常困难的工作。