【问题标题】:Working with 24-bit audio samples处理 24 位音频样本
【发布时间】:2013-07-03 13:45:14
【问题描述】:

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

  1. 将 24 位音频样本表示为 32 位整数并忽略高八位。
  2. 与 (1) 类似,但忽略低八位。
  3. 将 24 位音频样本表示为 32 位浮点数。
  4. 将样本表示为 3 个字节的结构(C/C++ 可接受,但 Java 不适用)。

你是怎么解决这个问题的?

【问题讨论】:

    标签: audio waveform 24-bit


    【解决方案1】:

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

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

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

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

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

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

    通常浮点样本存储在-1.0f < x < 1.0f 范围内。

    【讨论】:

    • 感谢您对我的问题非常周到的回答!如果您是我,您更愿意使用哪种音频样本表示来进行 Java 中的音频处理,包括 FFT 和均衡? 32 位有符号整数还是 32 位浮点数?
    • 在这种情况下,除了float,我认为您别无选择。整数算术中的 FFT 是非常非常困难的工作。
    • 非常感谢!得去编码了!
    • 建议编辑:“重新规范化”而不是“去规范化”。 denormal 是完全不同的东西。
    • “因此,如果您使用整数类型来存储样本,请尽可能使用最大的类型,并从最低有效 24 位的样本开始。”情况不一定如此。您可能希望保留精度而不是净空。取决于您的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多