1

我需要能够同时播放两个或更多(比如说,最多 5 个)短 ogg 文件。同时,我的意思是完美同步。我可以将它们加载到 SoundPool 并播放,但这有时会在播放开始时间上产生明显的差异,我想摆脱这种差异。

据我了解,如果将 PCM 混合到一个缓冲区中并播放,则可以避免这种情况。但是 OGG 不是 PCM,需要在播放前以某种方式有效地解码,并且延迟必须非常低,理想情况下,只要用户按下按钮。所以我想我需要一种将 OGG 流式传输到 PCM 的方法,当我收到缓冲区时,我会将它们混合并馈送到 AudioTrack。我的要求是 Android 2.3.3+,所以我不能使用 Jelly Bean 中提供的任何新编解码器。

此外,虽然 OGG 本身很小,但数量很多。因此,将它们全部解码在内存中(SoundPool 或一些预解码)也可能会出现问题。

有人可以给我提示在哪里挖掘吗?OpenSL ES 可以为我做到这一点吗?还是我应该考虑集成ffmpeg?甚至可以以低延迟流式传输同步文件吗?

谢谢

4

1 回答 1

1

您可以使用 AssetPlayers 播放声音,但这有时会在播放开始时间上产生明显差异,是的...

所以,我建议使用 Ogg Vorbis 解码 ogg(如这里),然后将此 PCM 缓冲区用于 BufferPlayer。

顺便说一句,检查这个 OpenSL ES 包装器

https://github.com/Suvitruf/Android-ndk/tree/master/OpenSLES

于 2014-04-06T07:43:06.537 回答