我使用以下代码使用java声音API播放声音文件.
Clip clip = AudioSystem.getClip(); AudioInputStream inputStream = AudioSystem.getAudioInputStream(stream); clip.open(inputStream); clip.start();
调用Clip.start()方法的方法立即返回,系统在后台线程中播放声音文件.我希望我的方法暂停,直到播放完成.
有没有好办法呢?
编辑:对于对我的最终解决方案感兴趣的每个人,根据Uri的答案,我使用下面的代码:
private final BlockingQueuequeue = 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()方法中......好运!
你可以把这个代码改为:
假设你的clip1正在播放,你想要在那之后播放一个clip2,你可以:
clip1.start(); while(clip1.getMicrosecondLength() != clip1.getMicrosecondPosition()) { } clip2.loop(some int here);
并且,为了使这项工作不延迟你的主要任务(我说这是因为while循环使得工作等待clip1完成,无论接下来的工作是什么......)你可以在你的位置创建一个新线程希望它发生,只需将代码放在run()方法中......好运!