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按顺序播放声音的主要内容,如果未能解决你的问题,请参考以下文章

Android - 按顺序播放多个声音

(iphone) 如何使用 AVAudioPlayer 顺序播放声音?

Javascript,循环播放声音

如何将一系列声音 HTML5 <audio> 声音剪辑排队以按顺序播放?

在javascript中同时播放多个声音

windows phone 7中的循环声音