Android有一个默认的音效实现机制,是用音效链来实现的,一个音效可以认为是一个数字滤波器,对PCM音频数据进行处理。
每个音效处理逻辑被编译成一个so库,放在system/lib/soundfx下面。
DownMixer
这个音效比较常用,就是把多声道音频给降级成双声道的。
DownMixer分为两种策略,一种是直接把左右声道之外的声道去掉,叫DOWNMIX_TYPE_STRIP;一种是把左右边的声道叠加到左右声道上,叫DOWNMIX_TYPE_FOLD。而多声道的处理分为几种:CHANNEL_MASK_QUAD_BACK,CHANNEL_MASK_QUAD_SIDE,CHANNEL_MASK_SURROUND,CHANNEL_MASK_5POINT1_BACK,CHANNEL_MASK_5POINT1_SIDE,CHANNEL_MASK_7POINT1_SIDE_BACK。
QUAD指的是Quadraphonic,四声道环绕立体声。具体的叠加就是防止溢出:
// FL + RL
pDst[0] = clamp16((pSrc[0] + pSrc[2])>> 1);
// FR + RR
pDst[1] = clamp16((pSrc[1] + pSrc[3])>> 1);
surround sound指的是前左,前右,前中,后中四路,算法如下:
centerPlusRearContrib = (pSrc[2] *MINUS_3_DB_IN_Q19_12) + (pSrc[3] * MINUS_3_DB_IN_Q19_12);
// FL + centerPlusRearContrib
&n

本文介绍了Android系统中基于音效链的多媒体处理,特别是DownMixer如何将多声道音频转换为双声道,包括DOWNMIX_TYPE_STRIP和DOWNMIX_TYPE_FOLD策略。同时,讲解了Reverberation(混响)处理,利用高低通滤波器实现声音持久化效果。此外,还涉及到了音频数据的溢出预防和音频可视化的概念。
最低0.47元/天 解锁文章
2213

被折叠的 条评论
为什么被折叠?



