小编Vin*_*uta的帖子

Java:混合两个WAV文件而不引入噪音

我正在尝试将2个WAV文件混合到一个WAV文件中。文件将始终具有完全相同的持续时间,并具有相同的格式(16位,44.1 kHz,带符号,小字节序,单声道)。这两个WAV都使用AudioSystem.getAudioInputSream的ByteArrayOutputStream放入字节数组,以确保我只是获取PCM数据而没有标题。

在其他几个线程的帮助下,我已经能够成功地组合阵列,但是也没有不给信号引入大量噪声。它绝对听起来不像是削波或失真,但是为了安全起见,我尝试对每对字节的总和求平均,这只会使所有内容变得更安静,更安静。

任何见解将不胜感激!我尝试了两种方法,它们应该执行相同的操作,并且似乎产生相同的声音结果。

第一种更简单的方法:

private byte[] mixBuffers(byte[] bufferA, byte[] bufferB) {
    byte[] array = new byte[bufferA.length];
    for (int i=0; i<bufferA.length; i++) {
        array[i] = (byte) ((bufferA[i] + bufferB[i]));
    }
    return array;
}
Run Code Online (Sandbox Code Playgroud)

第二种更具体的方法:

private byte[] mixBuffers(byte[] bufferA, byte[] bufferB) {
    byte[] array = new byte[bufferA.length];

    for (int i=0; i<bufferA.length; i+=2) {
        short buf1A = bufferA[i+1];
        short buf2A = bufferA[i];
        buf1A = (short) ((buf1A & 0xff) << 8);
        buf2A = (short) (buf2A & 0xff);

        short buf1B = bufferB[i+1];
        short buf2B …
Run Code Online (Sandbox Code Playgroud)

java audio merge wav

3
推荐指数
1
解决办法
1229
查看次数

标签 统计

audio ×1

java ×1

merge ×1

wav ×1