如何在2个相邻的音频文件之间重叠一些区域来播放音频文件?

时间:2019-04-17 14:29:10

标签: android android-mediaplayer exoplayer soundpool

我有5个音频文件,每个文件的长度为5秒。我想一一播放每个声音文件,但条件是如果播放下一个文件的音频文件应在4秒钟后播放,即相邻的音频文件声音应重叠1秒钟。我该如何实施?您可以建议哪个最好的音频播放器?

1 个答案:

答案 0 :(得分:0)

在Android上,您可以在Java端进行音频播放的具体工作量非常有限。

听起来您需要在播放过程中的某些时候混合声音以使其重叠。

在我看来,最好的方法是通过一个名为Oboe的C ++库(我目前正在使用它)。这是Google创建的用于音频播放的库。现在等等,让我解释一下!我知道实现C ++(尤其是如果现在仅在Java堆栈上实现)会给您的项目增加一些时间。

之所以想到这一点,是因为以这种方式(通过Oboe / C ++)播放音频,您实际上将音频样本的各个位移动了buffer stream。 C ++库实际上还具有一个Mixer类,您可以将2个不同的音频样本(实际上最多100个)混合在一起,然后最终通过缓冲区流进行渲染。

使用这种方法,您可以添加特定的逻辑来管理音频何时开始播放(如果相邻,则在4秒钟后)。此时,您可以将下一个剪辑的第一秒与当前播放的剪辑混合。

现在令人兴奋的一点是,您也许可以在Java中复制此过程!我发现这篇文章可能对您有帮助:

Android: How to mix 2 audio files and reproduce them with soundPool

现在,我确实警告您,以这种方式(通过缓冲流)渲染音频是一个复杂的过程,可能需要进行一些额外的研究才能完全理解该过程。我不能说我知道Java音频库的所有功能,但是我敢打赌,它们并没有太多支持以您需要的方式混合声音。因此,很可能您必须自己将其混合,否则您最后的选择可能就是使用NDK(C ++)。

希望这个答案会有所帮助。您的研究中最美好的祝愿!希望您会找到一种可行的简单方法。 (如果您这样做,请不要忘记分享您对这个问题的发现!)