2011-05-10 130 views
2
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

你是什么意思“它返回最后一个文件”? – Phonon 2011-05-10 16:44:55

+0

我的意思是audioinputstream s – nicks 2011-05-10 16:46:44

+0

当然我是...... – nicks 2011-05-10 17:07:26

回答

1

我只能看到这只返回第二个(s)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); 
    } 

此外,确保您捕捉和记录你的错误,在一些情况下,抛出。在我的测试案例中,一切正常。检查添加的日志语句,它显示文件大小前后的大小,并确保写入的内容大于或等于该值。

使方法更详细将有助于找到问题。有了这样更详细的内容,您就可以更轻松地使用调试器了。一旦你发现问题的根源,如果你愿意,你可以恢复到更紧凑的方式。

+0

我试过你的代码......它不适用于我... – nicks 2011-05-10 17:36:33

+0

什么不行?有没有错误?你能告诉我你的输出中显示了什么吗? – Sean 2011-05-10 18:55:33

+0

没有错误。相同... – nicks 2011-05-10 19:04:42

相关问题