我有这个简单的代码来连接两个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();
}
}
}
答案 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"));
<强>更新强>
答案 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类型。希望编辑软件:
如果你可以将它们转换成8位单声道和单声道在转换过程中8KHz,它可能会将byte[]
大小减小6到1倍.8KHz被认为足以理解语音,为此,您需要将组合声音的字节提供给浏览器 - 因此减小尺寸至关重要。