在 Android 上同步正确同步地同时播放两个不同的流(文件)

Playing two different streams (files) simultaneously with proper sync on Android

我正在使用两个 mediaPlayer 实例向每个频道发送两个不同的流。一半时间,它工作正常,但有时可以清楚地听到左右声道之间的滞后。除了 Android 中的 soundpool 之外,还有其他选择可以同步播放多个音频文件吗? soundpool 不适合我的应用程序,因为音频文件很大(每个大约 20 MiB)。有问题的音频文件格式是:FLAC。

我发现 Android API 没有提供合适的内置混音功能。我最终使用 wav 文件而不是 FLAC,并根据需要即时混合它们。这是我如何实现它的更高层次的描述。

Read both wav files and saving data part in byte array (Don't forget to strip out header bytes)

Mix them byte by byte to generate a unified wav file

在我的用例中,我只需要混合左右声道,但可以根据需要进行各种转换。

Create a temporary file to hold mixed data

Play the temporary file with mediaPlayer

也可以使用 audioTrack 播放而不将结果字节数组存储到临时文件,但由于内置的​​ seekTo 功能,我选择使用 mediaPlayer

希望这种方法对您有所帮助。