处理 24 位音频的“标准方式”是什么?嗯,真的没有可用的 24 位数据类型。以下是我想到的方法:

  • 将 24 位音频样本表示为 32 位整数,忽略高八位。
  • 就像 (1) 一样,但忽略低八位。
  • 将 24 位音频样本表示为 32 位浮点数。
  • 将样本表示为 3 个字节的结构(对 C/C++ 可接受,但对 Java 不利)。

  • 你如何解决这个问题?

    最佳答案

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

    音频样本通常显示为 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/

    10-16 11:51