Java 连接两个WAV文件失败
我有这个简单的代码来连接两个wav文件。它非常简单,代码运行时没有任何错误。但是输出文件有一个问题。生成的输出文件无法播放,令人惊讶的是,它的大小只有44字节,而我的输入文件“a.wav”和“b.wav”的大小都超过500Kb 这是我的密码:Java 连接两个WAV文件失败,java,javasound,javax.sound.sampled,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 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();
}
}
}
试试这种结构。这对我有用
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"));
更新
查证
clip1.getFormat()
返回-->
clip2.getFormat()
返回-->
这是一种奇怪的格式。我可以想象“每个样本的未知比特数”会引起问题,但MPEG2L3也会引起问题,因为JavaSound没有内置的MP3编码器。似乎它们没有正确编码。尝试将它们加载到声音编辑软件中,并将它们保存为Java声音可以理解的“开箱即用”的WAV或AU类型。希望编辑软件:
如果在转换过程中可以将其转换为8位单声道和8KHz,则可能会将
字节[]
大小减少6到1倍。8KHz被认为足以理解语音,为此,您需要将组合声音的字节发送到浏览器,因此减小其大小至关重要。我已经尝试过这种方法。它在尝试播放文件时提供相同的输出。我的意思是它不起作用。输出的大小是适当的。输出文件仍然无法播放。问题不在于编解码器。因为我下载了所有可能的播放器和所有可能的编解码器。这就是代码的输出。我认为没有创建适当的输出。什么是SequenceAudioInputStream
?对不起,我添加了SequenceAudioInputStream类。请检查并更改为您想要的方式。@AndrewThompson我的软件包中已经有来自jresources.org网站的SequenceAudioInputStream。但是用错了吗?试过你的代码,对我来说很好。请按照@AndrewThompson的建议检查这两个文件的格式。PS.44字节是wav头的长度。@AndrewThompson原始样本只是从互联网上下载的。它们是从“a”到“b”和“0”到“9”的简单mp3声音。@AndrewThompson我尝试了一个名为audacity(音频编辑器)的软件来实现这个技巧。最后它开始工作了。非常感谢你的帮助。我很感激。没有帮助是不可能的。@AndrewThompson Done:-)
MPEG2L3 24000.0 Hz, unknown bits per sample, mono, unknown frame size, 41.666668 frames/second
MPEG2L3 24000.0 Hz, unknown bits per sample, mono, unknown frame size, 41.666668 frames/second