audio - 使用 24 位音频样本

标签 audio waveform 24-bit

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

  1. 将 24 位音频样本表示为 32 位整数并忽略高八位。
  2. 与 (1) 类似,但忽略低八位。
  3. 将 24 位音频样本表示为 32 位 float 。
  4. 将示例表示为 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/

相关文章:

audio - 带有音频和视频过滤器的 ffplay/ffmpeg 设置表

c++ - C/C++ - 将 24 位有符号整数转换为 float

audio - FFmpeg - 如何设置输出样本大小

c# - 计算两个时间跨度DSP之间的差

unit-testing - 什么是单元测试数字音频生成的好技术

ios - 播放 15 秒 mp3 ios

Matlab 快速数据类型转换 4x1byte 到 1x32byte

audio - Vaadin音频搜寻位置

c# waveform - 如何显示麦克风数据

algorithm - 确定发生最具建设性干扰的偏移量