对Java代码语句的质疑
你能解释一下下面的代码吗? 尤其是这个代码语句对Java代码语句的质疑,java,Java,你能解释一下下面的代码吗? 尤其是这个代码语句 AudioInputStream joinFiles = new AudioInputStream(new SequenceInputStream( clip1, clip2), clip1.getFormat(), clip1.getFrameLength() + clip2.getFrameLength()); 我的理解是,只有在文件长度相同的情况下才能执行连接操作, 对吗 让我困惑的是: cl
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
AudioInputStream
在其构造函数中采用SequenceInputStream
、格式和长度
clip1.getFormat()
只是从clip1获取格式,并将其传递给新流。显然,这两个文件必须具有相同的格式才能工作
clip1.getFrameLength()+clip2.getFrameLength()
只是声明新流的长度应该是两个片段长度之和
我不知道这两个文件需要有相同的内容;我不明白为什么会出现这种情况。这段代码似乎没有什么奇怪之处-我认为您忽略了该部分,该部分执行以下操作:
SequenceInputStream
表示其他输入流的逻辑连接。它从输入流的有序集合开始,从第一个流开始读取,直到到达文件末尾,然后从第二个流开始读取,依此类推,直到最后一个包含的输入流到达文件末尾
假设您有2个文件(.wav)1.wav(16位,立体声,PCM_签名,持续时间54秒)2.wav(8位,单声道,PCM_无签名,持续时间3分钟02秒)文件在这种情况下连接不会产生好的结果。不幸的是,连接的文件长度不是3分56秒。结果文件有点损坏。。。我不知道。。有没有其他方法可以解决连接两个具有不同功能的wav文件的问题?@ulrike:问题在于这两个文件的格式不同,而不是长度不同。您应该首先考虑进行转换。我在java中进行此类转换方面没有太多经验,但这里的第310行似乎是朝着正确方向迈出的一步: