关于代码语句Java的疑问

时间:2010-07-07 07:59:41

标签: java

你能解释下面的代码..请问? 特别是这段代码声明

AudioInputStream joinFiles = new AudioInputStream(new SequenceInputStream(
            clip1, clip2), clip1.getFormat(), clip1.getFrameLength()
            + clip2.getFrameLength());

我的理解是只有文件长度相同才能进行连接操作, 那是对的吗?

让我感到困惑的是:

clip1.getFormat(), clip1.getFrameLength()
            + clip2.getFrameLength());

这是完整的代码:

AudioInputStream clip1 = AudioSystem.getAudioInputStream(song1);
        AudioInputStream clip2 = AudioSystem.getAudioInputStream(song2);


        AudioInputStream joinFiles = new AudioInputStream(new SequenceInputStream(
            clip1, clip2), clip1.getFormat(), clip1.getFrameLength()
            + clip2.getFrameLength());


        AudioSystem.write(joinFiles, AudioFileFormat.Type.WAVE, outfile);

谢谢你,Ulrike

2 个答案:

答案 0 :(得分:1)

AudioInputStream在其构造函数中采用SequenceInputStream,格式和长度。

clip1.getFormat()只从clip1获取格式,并将其传递给新流。这两个文件显然必须具有相同的格式才能工作。

clip1.getFrameLength() + clip2.getFrameLength()只是声明新流的长度应该是两个剪辑长度的总和。

我不知道这两个文件需要相同;我不明白为什么会这样。

答案 1 :(得分:1)

该代码似乎没有任何奇怪之处 - 我认为你忽略了SequenceInputStream部分,它执行以下操作:

  

SequenceInputStream表示其他输入流的逻辑串联。它从一个有序的输入流集合开始,从第一个读取到文件结束,然后从第二个读取,依此类推,直到最后一个包含的输入流到达文件末尾。