为什么这种方法不起作用?

时间:2011-05-10 16:40:33

标签: java audio audio-streaming

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

1 个答案:

答案 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);
    }

此外,确保您捕获并记录错误,以防万一引发。在我的测试案例中,一切正常。检查添加的日志语句,该日志语句显示前后文件的大小,同时确保写入的内容>> =该值。

使方法更详细将有助于找到问题。有了它,这样的更详细将允许您更容易地使用调试器。一旦找到问题的根源,如果愿意,可以恢复到更紧凑的方式。