我想将我的应用程序中的更多 WAV 文件合并到一个 WAV 文件中。但我不想连续组合它们(如 File1-File2-File3 ...),但所有文件应同时启动(同时/同时)。
在不使用某些本地库(如 FFmpeg)的情况下,这在 Android 中是否可行?我看了AudioTrack
和 SoundPool
但我认为这不是解决这个问题的方法。
我还发现了这篇文章 Android: How to mix 2 audio files and reproduce them with soundPool但是如何组合来自更多 WAV 文件的字节?
最佳答案
如果您使用 AudioTrack
或 SoundPool
,您将无法精确同步播放,而且很可能很容易听到。另一个问题是您的文件可能具有不同的声级,因此较轻的文件会被较大的文件所掩盖(想想在一段柔和的古典音乐上播放一些流行轨道)。您可能需要标准化输入声音文件的电平。
为了同时进行精确的合并和规范化,您必须自己混合文件的声音内容,然后播放结果输出。您需要自己将 .wav 文件作为二进制流读取,因为 Android 缺少 Java 的 AudioInputStream
可以使这更容易的类。将此视为如何使用基本 IO 类执行此操作的示例:
https://thiscouldbebetter.wordpress.com/2011/08/14/reading-and-writing-a-wav-file-in-java/
现在你的声音数据是 short
的数组。整数。这个答案描述了如何将样本数据从整数转换为浮点数并合并两个音频流,同时标准化它们的声级:
https://stackoverflow.com/a/32023546/4477684
为了合并两个以上的声音输入,从合并两个开始,然后将结果与第三个输入合并,依此类推。
关于Android - 同时将两个或多个 WAV 文件合并(合并)为一个(混合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37386506/