你能解释下面的代码..请问? 特别是这段代码声明
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
答案 0 :(得分:1)
AudioInputStream
在其构造函数中采用SequenceInputStream
,格式和长度。
clip1.getFormat()
只从clip1获取格式,并将其传递给新流。这两个文件显然必须具有相同的格式才能工作。
clip1.getFrameLength() + clip2.getFrameLength()
只是声明新流的长度应该是两个剪辑长度的总和。
我不知道这两个文件需要相同;我不明白为什么会这样。
答案 1 :(得分:1)
该代码似乎没有任何奇怪之处 - 我认为你忽略了SequenceInputStream部分,它执行以下操作:
SequenceInputStream
表示其他输入流的逻辑串联。它从一个有序的输入流集合开始,从第一个读取到文件结束,然后从第二个读取,依此类推,直到最后一个包含的输入流到达文件末尾。