从Java加入两个WAV文件?

时间:2009-03-17 11:37:53

标签: java audio

在Java 1.6中连接两个WAV文件的最简单方法是什么? (等频和所有,没什么特别的。)

(这可能太简单了,但我的Google-fu今天在这个问题上似乎很弱。)

4 个答案:

答案 0 :(得分:35)

以下是准系统代码:

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();
        }
    }
}

答案 1 :(得分:4)

WAV标头应该不难解析,如果我正确读取this header description,你可以从第二个WAV中去掉前44个字节,然后简单地将字节附加到第一个字节。之后,您当然应该更改第一个WAV的某些标题字段,以便它们包含正确的新长度。

答案 2 :(得分:4)

我通过this上的“代码示例和应用”链接找到了here(AudioConcat)。

答案 3 :(得分:1)

如果两个WAV文件在wave标头中没有完全相同的格式,则会出现您的挑战。

如果两个文件上的波形格式不一样,那么你将不得不找到一种方法来对它们进行变换,使它们匹配。

这可能涉及MP3转码或其他类型的转码(如果其中一个用MP3编解码器编码)。