“最快”是指最低延迟。
我知道的两种方法是:
- 使用 android.media.AudioTrack
- 将 OpenSL ES 与 NDK/C++ 一起使用
两者中,哪个更快?如果还有其他选择,请赐教。
更多细节:假设我的应用程序将播放倾向于原生硬件格式的声音。EG,如果本机播放采样率为 44.1KHz,我会给它一个 44.1K 的声音。如果原始采样率是 48KHz,我会给它一个 48KHz 的声音。不需要系统混合器或重新采样器。
上次我检查 Android 源代码时,仅有的两个使用 Jellybean 中添加的低延迟路径的 API 是OpenSL ES
和SoundPool
(也许ToneGenerator
也是如此,但我想这在这里无关紧要)。
如果您有一堆静态声音,则使用 aSoundPool
将是最方便的选择。对于实时生成的音频,您必须使用 OpenSL ES。
对于选择低延迟路径需要满足的条件列表,我建议您参考libaudioflinger和libwilhelm的源代码。简短摘要:使用原生采样率、单声道或立体声线性 PCM,没有效果。