Android混音播放(二)

796 阅读1分钟

Oboe 混音播放

前两篇文章讲解了混音的原理以及Oboe播放音频相关的流程与类图。

先回顾下Oboe播放音频,

image.png

再深入分析 OnAudioReady() 这块(也就是AudioEngine) 对应的类图

image.png

从类图可看出,AudioEngine 实现了 Oboe 里的 OnAudioReady 方法。

所以,可以理解为,AudioEngine 将承担着一切的音频处理。

显而易见,处理混音将是 Mixer 的工作。

image.png

Mixer 继承与 IRenderableAudio, 其中 renderAudio()方法是用于渲染音频数据的。

换言之,Mixer 持有多个能够渲染音频数据的对象,实际上就是 Track 对象。

如此一来,整个混音的结构如下图:

image.png

整个流程则是:

Oboe 请求 AudioEngine 填充 audioData 数据, AudioEngine 转发给 Mixer, Mixer 则遍历 Track列表,Track各自往 audioData里填充数据后,再回传给 AudioEngine,最后回传给Oboe 播放声音。

AudioEngine onAudioReady方法的实现:

image.png

而 Mixer 完成混音的实现则是:

image.png

至此,整个Oboe的混音方案介绍已结束。

其实,只要理解了混音的原理就是 PCM 数据的叠加后,整个流程就清晰了。