用Java依次播放WAV文件

我试图互相播放一些WAV文件。我尝试了这种方法:

for (String file : audioFiles) {

new AePlayWave(file).start();

}

但这同时发挥了所有作用。所以我需要一个看起来像这样的函数:

public void play(Vector<String> audioFiles);

向量包含文件,例如:"test1.wav""test2.wav"

我已经寻找了四个多小时,但似乎找不到有效的解决方案:(

我还尝试将WAV文件连接到一个AudioInputStream。它不会产生任何编译器错误,但是声音完全混乱了。码:

public static AudioInputStream concat(Vector<String> files) throws UnsupportedAudioFileException, IOException {

AudioInputStream total = AudioSystem.getAudioInputStream(new File(files.get(0)));

for (int i = 1; i < files.size(); i++) {

AudioInputStream clip = AudioSystem.getAudioInputStream(new File(files.get(i)));

total = new AudioInputStream(new SequenceInputStream(total, clip),

total.getFormat(),

total.getFrameLength() + clip.getFrameLength());

}

return total;

}

即使我尝试将前两个文件放在一起,也会失败:

public static AudioInputStream concat(Vector<String> files) throws UnsupportedAudioFileException, IOException {

AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(files.get(0)));

AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(files.get(1)));

AudioInputStream total = new AudioInputStream(

new SequenceInputStream(clip1, clip2),

clip1.getFormat(),

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

return total;

}

回答:

这段代码有点底层,但是可以正常工作:

    byte[] buffer = new byte[4096];

for (File file : files) {

try {

AudioInputStream is = AudioSystem.getAudioInputStream(file);

AudioFormat format = is.getFormat();

SourceDataLine line = AudioSystem.getSourceDataLine(format);

line.open(format);

line.start();

while (is.available() > 0) {

int len = is.read(buffer);

line.write(buffer, 0, len);

}

line.drain(); //**[DEIT]** wait for the buffer to empty before closing the line

line.close();

} catch (Exception e) {

e.printStackTrace();

}

}

基本上,您打开一个AudioInputStream,读取数据并将其写入SourceDataLine。write方法被阻止,因此它将播放文件。

您可以尝试将其Clip用于相同目的。

以上是 用Java依次播放WAV文件 的全部内容, 来源链接: utcz.com/qa/401719.html

回到顶部