我需要能够同时播放两个或更多(例如,最多5个)短ogg文件。同时我的意思是完美同步。我可以将它们加载到SoundPool并播放,但这有时会在播放开始时间方面产生明显的差异,我想摆脱它。
根据我的理解,如果将PCM混合到一个缓冲区并播放,则可以避免这种情况。但OGG不是PCM,需要在播放之前以某种方式有效地解码,并且延迟必须非常低,理想情况是用户按下按钮。所以我想我需要一种方法将OGG流式传输到PCM中,当我收到缓冲区时,我会将它们混合并提供给AudioTrack。我的要求是Android 2.3.3+,所以我不能使用Jelly Bean中提供的任何新编解码器。
虽然OGG本身很小,但它们很多。因此,将它们全部解码在内存中(SoundPool或一些预解码)也可能会出现问题。
有人可以给我一个小费的地方吗? OpenSL ES可以帮我吗?或者我应该考虑整合ffmpeg?甚至可以以低延迟流式传输同时文件?
由于
答案 0 :(得分:1)
您可以使用AssetPlayers播放声音,但这有时会在播放开始时间方面产生明显的差异,是的......
所以,我建议使用Ogg Vorbis(如here)解码ogg,然后将此PCM缓冲区用于BufferPlayer。
顺便说一句,检查一下这个OpenSL ES包装器
https://github.com/Suvitruf/Android-ndk/tree/master/OpenSLES