Oboe 混音播放
前两篇文章讲解了混音的原理以及Oboe播放音频相关的流程与类图。
先回顾下Oboe播放音频,
再深入分析 OnAudioReady() 这块(也就是AudioEngine) 对应的类图
从类图可看出,AudioEngine 实现了 Oboe 里的 OnAudioReady 方法。
所以,可以理解为,AudioEngine 将承担着一切的音频处理。
显而易见,处理混音将是 Mixer 的工作。
Mixer 继承与 IRenderableAudio, 其中 renderAudio()方法是用于渲染音频数据的。
换言之,Mixer 持有多个能够渲染音频数据的对象,实际上就是 Track 对象。
如此一来,整个混音的结构如下图:
整个流程则是:
Oboe 请求 AudioEngine 填充 audioData 数据, AudioEngine 转发给 Mixer, Mixer 则遍历 Track列表,Track各自往 audioData里填充数据后,再回传给 AudioEngine,最后回传给Oboe 播放声音。
AudioEngine onAudioReady方法的实现:
而 Mixer 完成混音的实现则是:
至此,整个Oboe的混音方案介绍已结束。
其实,只要理解了混音的原理就是 PCM 数据的叠加后,整个流程就清晰了。