java按顺序播放声音

时间:2014-03-30 08:43:08

标签: java audio

嗨我有以下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 个答案:

答案 0 :(得分:0)

我从某个地方获得了以下代码,我现在无法记住,但它会播放音乐:

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()之前清空。