AUDIO_FORMAT_PCM_32_BIT和AUDIO_FORMAT_PCM_8_24_BIT是Android Lollipop中的两种高清音频格式。
似乎它们都在 32 位深度。
谁知道它们之间的确切区别?
您可以在 audio.h 中找到该信息:
/* Audio format consists of a main format field (upper 8 bits) and a sub
format field (lower 24 bits).
AUDIO_FORMAT_PCM_32_BIT
和AUDIO_FORMAT_PCM_8_24_BIT
定义为:
AUDIO_FORMAT_PCM_32_BIT = (AUDIO_FORMAT_PCM |
AUDIO_FORMAT_PCM_SUB_32_BIT),
AUDIO_FORMAT_PCM_8_24_BIT = (AUDIO_FORMAT_PCM |
AUDIO_FORMAT_PCM_SUB_8_24_BIT),
如果我们查看AUDIO_FORMAT_PCM_SUB_32_BIT
和AUDIO_FORMAT_PCM_8_24_BIT
的定义,我们会发现一些有用的评论:
AUDIO_FORMAT_PCM_SUB_32_BIT = 0x3, /* PCM signed .31 fixed point */
AUDIO_FORMAT_PCM_SUB_8_24_BIT = 0x4, /* PCM signed 7.24 fixed point */
回应迈克尔的评论:
signed .31
表示符号为 1 位,整个部分为 0 位,小数部分为 31 位。signed 7.24
表示符号为 1 位,整个部分为 7 位,小数部分为 24 位。如果您想了解更多关于定点算术的使用方式,请阅读定点算术。
AUDIO_FORMAT_PCM_8_24_BIT
很可能是指填充的 8 位零,因为 7.24 固定点对 PCM 数据没有意义。这是因为 PCM 数据的范围为 [1.0 .. -1.0]。(技术上应该是 8.23,否则 7.24 == 25 位!因此,使用"整数"[数字]部分是没有意义的。
单个AUDIO_FORMAT_PCM_8_24_BIT
样本将包含 4 个字节,其中只有 3 个字节将保存任何有意义的数据,其余的单个字节将全部为零。
另一种方法是每个样本仅包含 3 个字节且没有填充的AUDIO_FORMAT_PCM_24_BIT_PACKED
。 24 位音频的格式很奇怪,它不适合 2 次级数字音频的幂。处理 24 位样本通常更容易,就像处理 32 位样本一样。