2010-07-07 74 views
0

你能解释下面的代码吗?请问? 尤其是这段代码声明关于代码声明的疑问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); 

谢谢你,乌尔里克

回答

1

AudioInputStream需要SequenceInputStream,格式,并在长度上构造函数。

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

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

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

+0

假设有2个文件(.WAV) 1.wav(16位,立体声,PCM_SIGNED,持续时间54秒) 2.wav(8位,单声道,PCM_UNSIGNED,时间为3分钟02秒) 文件加入这种情况并没有给出好的结果。 不幸的是加入的文件长度不是3分56秒。 生成的文件有点dameged ... 我不知道.. 是否有另一种方法来解决加入2个不同功能的wav文件的问题? – ulrike 2010-07-07 08:35:14

+0

@ulrike:这两个文件具有不同格式的事实将成为问题 - 而不是它们的长度不同。你应该先看看这种转换。我在Java中没有太多的经验来做这样的转换,但是这里的第310行似乎是朝着正确方向迈出的一步:http://www.docjar.com/html/api/com/sun/media/sound/ WaveFileWriter.java.html – 2010-07-07 09:25:56

1

似乎有不被有关代码什么奇怪 - 我认为你可以俯瞰SequenceInputStream部分,它具有下列功能:

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