public AudioInputStream append(AudioInputStream main, AudioInputStream s) throws UnsupportedAudioFileException, IOException {
AudioSystem.write(new AudioInputStream(
new SequenceInputStream(main, s),
main.getFormat(),
main.getFrameLength() + s.getFrameLength()), AudioFileFormat.Type.WAVE, new File("/home/nikkka/Desktop/alphabet/result_for_watch.wav"));
return AudioSystem.getAudioInputStream(new File("/home/nikkka/Desktop/alphabet/result_for_watch.wav"));
}
它应该附加音频文件,但它总是返回最后一个文件,而不是它们两个!...有什么问题? :S
答案 0 :(得分:1)
我能看到这只返回第二个AudioInputStream的唯一方法是在第一个读取时出现问题。 我建议打破你的方法。这里我扩展了一些方法,以便添加一些日志语句并使其更加冗长。我没有改变任何功能。
public AudioInputStream append(AudioInputStream main, AudioInputStream s)
throws UnsupportedAudioFileException, IOException {
SequenceInputStream sis = new SequenceInputStream(main, s);
long length = main.getFrameLength() + s.getFrameLength();
logger.debug(main.getFrameLength() + "+" + s.getFrameLength() +
"=" + length);
AudioFormat fmt = main.getFormat();
File file = new File("c:/MyNew.wav"); //changed for testing
AudioInputStream ais = new AudioInputStream(sis, fmt, length);
int size = AudioSystem.write( ais, AudioFileFormat.Type.WAVE, file);
logger.debug("Wrote :" + size);
return AudioSystem.getAudioInputStream(file);
}
此外,确保您捕获并记录错误,以防万一引发。在我的测试案例中,一切正常。检查添加的日志语句,该日志语句显示前后文件的大小,同时确保写入的内容>> =该值。
使方法更详细将有助于找到问题。有了它,这样的更详细将允许您更容易地使用调试器。一旦找到问题的根源,如果愿意,可以恢复到更紧凑的方式。