簡體   English   中英

java按順序播放聲音

[英]java playing sounds in order

嗨,我有下面的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");

程序正在並行播放我不想播放的聲音。我想按順序播放

我從現在不記得的某個地方得到了以下代碼,但是它可以播放音樂:

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()之前等待緩沖區為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM