tags:

views:

1493

answers:

4

What's the simplest way to concatenate two wav files in java 1.6 ? (Equal frequency and all, nothing fancy)

(This is probably sooo simple, but my google-fu seems weak on this subject today)

+2  A: 

The WAV header should be not be too hard to parse, and if I read this header description correctly, you can just strip the first 44 bytes from the second WAV and simply append the bytes to the first one. After that, you should of course change some of the header fields of the first WAV so that they contain the correct new length.

schnaader
Assuming they are of the same bit-rate, sample-rate, and have the same number of channels.
dreamlax
Of course, but krosenvold said they were.
schnaader
But do I really have to do this myself ? There must be a simpler solution ??
krosenvold
You could have a look at javax.sound.sampled.AudioFileFormat - at least it's able to read WAV files, perhaps you can write WAVs with it, too.
schnaader
+3  A: 

I found this (AudioConcat) via the "Code Samples & Apps" link on here.

McDowell
+4  A: 

Here is the barebones code:

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();
     }
    }
}
James Van Huis
Thank you! There had to be a simple way.
krosenvold
+1  A: 

Your challenge though occurs if the two WAV files don't have the exact same format in the wave header.

If the wave formats on the two files aren't the same, you're going to have to find a way to transmogrify them so they match.

That may involve an MP3 transcode or other kinds of transcoding (if one of them is encoded with an MP3 codec).

Larry Osterman
Well I suppose I'm lucky that I don't have to consider this.
krosenvold