Android - 同时将两个或多个 WAV 文件合并(合并)为一个(混合)

标签 android audio ffmpeg wav android-audiomanager

我想将我的应用程序中的更多 WAV 文件合并到一个 WAV 文件中。但我不想连续组合它们(如 File1-File2-File3 ...),但所有文件应同时启动(同时/同时)。

在不使用某些本地库(如 FFmpeg)的情况下,这在 Android 中是否可行?我看了AudioTrackSoundPool但我认为这不是解决这个问题的方法。

我还发现了这篇文章 Android: How to mix 2 audio files and reproduce them with soundPool但是如何组合来自更多 WAV 文件的字节?

最佳答案

如果您使用 AudioTrackSoundPool ,您将无法精确同步播放,而且很可能很容易听到。另一个问题是您的文件可能具有不同的声级,因此较轻的文件会被较大的文件所掩盖(想想在一段柔和的古典音乐上播放一些流行轨道)。您可能需要标准化输入声音文件的电平。

为了同时进行精确的合并和规范化,您必须自己混合文件的声音内容,然后播放结果输出。您需要自己将 .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/

相关文章:

android - FFmpeg - 转换视频以在 Android 设备上播放的命令

java - 如何将 ByteBuffer 转换为 Bitmap Image?

java - Android 将原始源类复制到自定义类

android - TIME_TICK 会在深度 sleep 中广播吗?

java - Android - 无法以编程方式删除 Wifi 网络 - WifiManager 类型中的方法 removeNetwork(int) 不适用于参数(字符串)

python - 使用 python Discord bot 播放 Youtube 音频

java - 比较不同规范的mp3和wav文件的最佳方法?

opencv - 视频文件打不开?(opencv 3.1.0 windows)

java - 如何从麦克风捕获音频并将其保存为 Java 中的 FLAC 文件格式类型?

c# - 如何向ffmpeg提供登录用户名和密码?