Присоединиться к двум файлам WAV с Java?
4 ответа
Решение
Вот код barebones:
import java.io.File;
import java.io.IOException;
import java.io.SequenceInputStream;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
public class WavAppender {
public static void main(String[] args) {
String wavFile1 = "D:\\wav1.wav";
String wavFile2 = "D:\\wav2.wav";
try {
AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wavFile1));
AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2));
AudioInputStream appendedFiles =
new AudioInputStream(
new SequenceInputStream(clip1, clip2),
clip1.getFormat(),
clip1.getFrameLength() + clip2.getFrameLength());
AudioSystem.write(appendedFiles,
AudioFileFormat.Type.WAVE,
new File("D:\\wavAppended.wav"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Заголовок WAV не должен быть слишком сложным для анализа, и если я правильно прочитал это описание заголовка, вы можете просто удалить первые 44 байта из второго WAV и просто добавить байты к первому. После этого вам, конечно, следует изменить некоторые поля заголовка первого WAV, чтобы они содержали правильную новую длину.
2009-03-17 12:27
Однако ваша проблема возникает, если два файла WAV не имеют одинаковый формат в заголовке волны.
Если форматы волн в этих двух файлах не совпадают, вам нужно будет найти способ трансмогрифицировать их, чтобы они соответствовали друг другу.
Это может включать в себя транскодирование MP3 или другие виды транскодирования (если один из них закодирован с помощью кодека MP3).