首页 > 解决方案 > 如何通过重叠 2 个相邻音频文件之间的某些区域来播放音频文件?

问题描述

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

标签: androidandroid-mediaplayerexoplayersoundpool

解决方案


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

听起来您需要在播放过程中的某个时间点混合您的声音以重叠。

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

想到这一点的原因是,在这种播放音频的方式中(通过双簧管/C++),您将音频样本的各个位物理移动到buffer stream. C++ 库实际上还有一个 Mixer 类,您可以将 2 个不同的音频样本(实际上最多 100 个)放入其中进行混合,然后最终通过缓冲区流进行渲染。

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

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

Android:如何混合 2 个音频文件并使用 soundPool 重现它们

现在我警告你,以这种方式(通过缓冲流)渲染音频是一个复杂的过程,可能需要一些额外的研究才能完全理解这个过程。我不能说我知道 Java 音频库的所有功能,但我敢打赌,它们对以您需要的方式混合声音没有太多支持。所以很可能你必须自己混合它,或者你最后的手段可能是使用 NDK (C++)。

希望这个答案有帮助。祝您研究顺利!希望您能找到一种简单有效的方法。(如果你这样做了,别忘了分享你在这个问题上的发现!)


推荐阅读