java按顺序播放声音
Posted
技术标签:
【中文标题】java按顺序播放声音【英文标题】:java playing sounds in order 【发布时间】:2014-03-30 08:43:08 【问题描述】:嗨,我有以下播放声音的 java 程序。我想播放声音,例如在 sound1 结束后我想播放 sound2 然后 sound3 以下是我的 java 代码和播放声音的功能。
private void playsound(String file)
try
crit = Audiosystem.getClip();
AudioInputStream inputStream1 = AudioSystem.getAudioInputStream(this.getClass().getResource(file));
crit.open(inputStream1);
//if(!crit.isOpen())
crit.start();
catch (Exception ex)
System.out.println(ex.getMessage());
并如下调用它
playsound("/sounds/filesound1.au");
playsound("/sounds/filesound2.au");
playsound("/sounds/filesound3.au");
程序正在并行播放我不想要的声音。我想按顺序播放 问候
【问题讨论】:
【参考方案1】:我从某个地方得到了以下代码,我现在不记得了,但它会播放音乐:
public static void play(ArrayList<String> files)
byte[] buffer = new byte[4096];
for (String filePath : files)
File file = new File(filePath);
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();
line.close();
catch (Exception ex)
ex.printStackTrace();
之所以会因此而不是同时播放所有文件,是因为write
会阻塞,直到请求的数据量被写入。即使请求写入的数据量大于数据线的缓冲区大小,这也适用。
确保在上面的代码中包含drain()
。 drain()
在 close()
s 之前等待缓冲区清空。
【讨论】:
以上是关于java按顺序播放声音的主要内容,如果未能解决你的问题,请参考以下文章
(iphone) 如何使用 AVAudioPlayer 顺序播放声音?