我正在尝试将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)