声音结束后执行操作

时间:2011-12-31 00:54:07

标签: java swing audio action javasound

我现在可以在我的Java Swing应用程序中使用JavaSound和来自Java play WAV sound file的代码来播放声音。我现在想做的是:

播放声音;声音结束后,我想播放另一个声音(这是动作)。 所以基本上,步骤:

  1. 播放声音。 (我知道这声音需要多长时间 - 4秒)。
  2. 声音结束后。
  3. 执行操作(例如播放其他声音)。
  4. 我尝试了几个选项,延迟,线程,但无法弄明白。

2 个答案:

答案 0 :(得分:4)

在您的示例中,正在使用DataLine对象播放声音。 DataLine对象有一个方法调用addLineListener,它接受​​一个实现LineListener接口的对象,并公开您可以使用的startstop等事件执行你的动作或播放另一种声音。

您需要做的是:

  1. 在您的课程中实施LineListener界面
  2. 使用addLineListener调用this方法订阅更新活动 参数
  3. 实施update接口
  4. LineListener方法
  5. 使用update方法测试活动并提供您需要的操作
  6. Here's a link演示了在LineListener方法中处理update个事件。

答案 1 :(得分:2)

作为Abbas良好解决方案的替代方案,我建议您定期检查用于播放该文件的线程是否存活。

查看由您提供的教程,主程序创建线程类的新实例,并使用start()方法启动线程。因此,您可以检查线程是否仍然存在。当线程死了,你可以做你想要的。例如:

    AePlayWave apw = new AePlayWave("test.wav");
    apw.start();

    try{
        boolean alive = apw.isAlive();
        while(alive){
            //check periodically if the thread is alive         
            alive = apw.isAlive();
            Thread.currentThread().sleep(500);

            }

    }

    catch(InterruptedException e){
        System.out.println("Interrupted");
        e.printStackTrace();
    }

//do other action..

apw线程死亡(然后布尔alive为假)并且程序从while循环退出时,您可以执行所需的操作。