安卓棒棒糖中的AUDIO_FORMAT_PCM_32_BIT和AUDIO_FORMAT_PCM_8_24_BIT有什么区



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_BITAUDIO_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_BITAUDIO_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 位样本一样。

相关内容

最新更新