我希望将我的应用中的更多WAV文件合并到一个WAV文件中。但我不想连续组合它们(如File1-File2-File3 ......)但所有文件应该同时启动(同时/同时)。
这是否可以在Android中使用而不使用某些本机库(如FFmpeg)?我查看了AudioTrack
和SoundPool
,但我认为这不是解决此问题的方法。
我也发现了这篇文章Android: How to mix 2 audio files and reproduce them with soundPool但是如何组合来自更多WAV文件的字节?
答案 0 :(得分:0)
如果您使用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
为了合并两个声音输入,首先合并两个,然后将结果与第三个输入合并,依此类推。