程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Java检测声音何时停止

发布于2023-05-25 19:40     阅读(1036)     评论(0)     点赞(27)     收藏(4)


我的应用程序有一个声音类,当我告诉它时它也会播放特定的声音。我希望能够检测到声音何时播放完毕,这样我就可以播放不同的声音而不会重叠这里是我的声音类别:

public class Sound {

public static final Sound cash = new Sound("/cash.wav");
public static final Sound snap = new Sound("/snap.wav");
public static final Sound disarm = new Sound("/disarm.wav");
public static final Sound tp = new Sound("/tp.wav");
public static final Sound select = new Sound("/selectBTN.wav");
public static final Sound scroll = new Sound("/btn.wav");
public static final Sound fire = new Sound("/fire2.wav");

private AudioClip c;

public Sound(String filename) {
    try {
        c = Applet.newAudioClip(Sound.class.getResource(filename));

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void play() {
    try {
        new Thread() {
            public void run() {
                if (!title.mute) {

                    c.play();
                }
            }
        }.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

然后播放我使用这行代码的声音:

   Sound.cash.play();

如何检测声音何时播放完毕


解决方案


尝试这样的事情(是一个近似值),用 LineListener 来检测播放结束:

    import javax.sound.sampled.AudioInputStream;
    import javax.sound.sampled.AudioSystem;
    import javax.sound.sampled.Clip;
    import javax.sound.sampled.LineEvent;
    import javax.sound.sampled.LineEvent.Type;
    import javax.sound.sampled.LineListener;

    public class Sound {


        private Clip                    c;

        public Sound(final String filename) {
            try {
                c = AudioSystem.getClip();
                final AudioInputStream inputStream = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(filename));
                c.open(inputStream);
                c.addLineListener(new LineListener() {

                    @Override
                    public void update(final LineEvent event) {
                        if (event.getType().equals(Type.STOP)) {
                            System.out.println("Do something");
                        }
                    }
                });
            } catch (final Exception e) {
                e.printStackTrace();
            }
        }

        public void play() {
            c.start();
        }

        public static void main(final String[] args) throws InterruptedException {
            final Sound s = new Sound("/cash.wav");
            s.play();
            Thread.sleep(100000);
            final Sound p = new Sound("/cash.wav");
            p.play();
            Thread.sleep(10000);
        }
    }


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/673751/cc64bb5ade50e15e85f5/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)