两个WAV文件的连接失败

时间:2012-11-14 15:30:51

标签: java javasound javax.sound.sampled

我有这个简单的代码来连接两个wav文件。它非常简单,代码运行没有任何错误。但是输出文件存在问题。生成的输出文件无法播放,令人惊讶的是它的大小只有44个字节,而我的输入文件“a.wav”& “b.wav”的大小都超过500Kb。

这是我的代码:

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 WavConcat {
    public static void main(String[] args) {
        String wFile1 = "./sounds/a.wav";
        String wFile2 = "./sounds/b.wav";

        try {
            AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wFile1));
            AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wFile2));

            AudioInputStream appendedFiles = 
                            new AudioInputStream(
                                new SequenceInputStream(clip1, clip2),     
                                clip1.getFormat(), 
                                clip1.getFrameLength() + clip2.getFrameLength());

            AudioSystem.write(appendedFiles, 
                            AudioFileFormat.Type.WAVE,new File("./sounds/ab.wav"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

尝试这种结构。这对我有用

List audioInputStreamList = new ArrayList();

    String wFile1 = "./sounds/a.wav";
    String wFile2 = "./sounds/b.wav";

 AudioInputStream audioInputStream1 = AudioSystem.getAudioInputStream(new File(wFile1));
 AudioInputStream audioInputStream2 = AudioSystem.getAudioInputStream(new File(wFile2));

 audioInputStreamList.add(audioInputStream1);
 audioInputStreamList.add(audioInputStream2);

 AudioFormat audioFormat = audioInputStream1.getFormat(); // audioInputStream2 format also same

 AudioInputStream udioInputStream = new SequenceAudioInputStream(audioFormat,audioInputStreamList);

 AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE,new File("./sounds/ab.wav"));

<强>更新

检查SequenceAudioInputStream

答案 1 :(得分:1)

  

clip1.getFormat()返回 - &gt;

MPEG2L3 24000.0 Hz, unknown bits per sample, mono, unknown frame size, 41.666668 frames/second
  

clip2.getFormat()返回 - &gt;

MPEG2L3 24000.0 Hz, unknown bits per sample, mono, unknown frame size, 41.666668 frames/second

这是一种奇怪的格式。我可以想象'每个样本的'未知位'导致问题,但也是MPEG2L3,因为JavaSound没有内置的MP3编码器。看起来它们编码不正确。尝试将它们加载到声音编辑软件中,并将它们保存为Java Sound可以“开箱即用”理解的WAV或AU类型。希望编辑软件:

  1. 可以理解破碎的MP3和..
  2. 将写一个有效的WAV或AU。
  3. 如果你可以将它们转换成8位单声道和单声道在转换过程中8KHz,它可能会将byte[]大小减小6到1倍.8KHz被认为足以理解语音,为此,您需要将组合声音的字节提供给浏览器 - 因此减小尺寸至关重要。