当前位置:  开发笔记 > 编程语言 > 正文

我如何等待java声音片段完成播放?

如何解决《我如何等待java声音片段完成播放?》经验,为你挑选了1个好方法。

我使用以下代码使用java声音API播放声音文件.

    Clip clip = AudioSystem.getClip();
    AudioInputStream inputStream = AudioSystem.getAudioInputStream(stream);
    clip.open(inputStream);
    clip.start();

调用Clip.start()方法的方法立即返回,系统在后台线程中播放声音文件.我希望我的方法暂停,直到播放完成.

有没有好办法呢?

编辑:对于对我的最终解决方案感兴趣的每个人,根据Uri的答案,我使用下面的代码:

private final BlockingQueue queue = new ArrayBlockingQueue(1);

public void playSoundStream(InputStream stream) {
    Clip clip = AudioSystem.getClip();
    AudioInputStream inputStream = AudioSystem.getAudioInputStream(stream);
    clip.open(inputStream);
    clip.start();
    LineListener listener = new LineListener() {
        public void update(LineEvent event) {
                if (event.getType() != Type.STOP) {
                    return;
                }

                try {
                    queue.take();
                } catch (InterruptedException e) {
                    //ignore this
                }
        }
    };
clip.addLineListener(listener );
}

小智.. 6

你可以把这个代码改为:

假设你的clip1正在播放,你想要在那之后播放一个clip2,你可以:

clip1.start();
while(clip1.getMicrosecondLength() != clip1.getMicrosecondPosition())
{
}
clip2.loop(some int here);

并且,为了使这项工作不延迟你的主要任务(我说这是因为while循环使得工作等待clip1完成,无论接下来的工作是什么......)你可以在你的位置创建一个新线程希望它发生,只需将代码放在run()方法中......好运!



1> 小智..:

你可以把这个代码改为:

假设你的clip1正在播放,你想要在那之后播放一个clip2,你可以:

clip1.start();
while(clip1.getMicrosecondLength() != clip1.getMicrosecondPosition())
{
}
clip2.loop(some int here);

并且,为了使这项工作不延迟你的主要任务(我说这是因为while循环使得工作等待clip1完成,无论接下来的工作是什么......)你可以在你的位置创建一个新线程希望它发生,只需将代码放在run()方法中......好运!

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有