Android AudioFlinger 数据流 + 音效链(Effect Chain)深度解析

2 阅读1分钟

从混音到音效处理的完整链路

看了很多关于android 音频相关的文章,很多大佬都写了很多比较清晰的文章,但我对于audioflinger和音效库之间的关联也不是很清晰,笼统的以为音效是在flinger混音前通过音效处理的,因为flinger是可以绑定track级别的,所以不可能是在mixer之后,但实际情况并非如此,或者说这里的实现和我想象的并不一样:

很多人误解一件事👇

❗ 音效不是在 AudioMixer 里面做的

👉 实际结构是:

Track → AudioMixer → EffectChain → HAL

而不是:

Track → Effect → Mixer(❌错误理解)

去看threads线程可知,effectchain的处理是在threadloop里面:

effectChains[i]->process_l();

这里的process_l是在调用

threadLoop_mix();

之后,这就很奇怪了,既然mixer都做完了,那再调用effect的函数,如何能够精确对某个track做音效处理呢?