gpt4 book ai didi

javax.sound.sampled.clip 在播放声音之前终止

转载 作者:行者123 更新时间:2023-12-02 06:09:14 24 4
gpt4 key购买 nike

我很困惑为什么会立即终止...调试器到目前为止没有真正的帮助..我确信代码正在运行整个过程。

import java.io.File;

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

/**
* An example of loading and playing a sound using a Clip. This complete class
* isn't in the book ;)
*/
public class ClipTest {

public static void main(String[] args) throws Exception {

// specify the sound to play
// (assuming the sound can be played by the audio system)
File soundFile = new File("C:\\Users\\Benny\\Desktop\\AudioSample\\Austin.wav");
AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile);

// load the sound into memory (a Clip)
DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(sound);
// due to bug in Java Sound, explicitly exit the VM when
// the sound has stopped.
clip.addLineListener(new LineListener() {
public void update(LineEvent event) {
if (event.getType() == LineEvent.Type.STOP) {
event.getLine().close();
System.exit(0);
}
}
});
// play the sound clip
clip.start();
}
}

最佳答案

clip.start() 的调用导致声音在不同的线程上播放,即在“Java Sound Event Dispatcher”线程上。主线程正常进行,应用程序退出。

根据您想要播放此剪辑的方式何时,有不同的解决方案。很多时候,不需要采取额外的预防措施。例如,在游戏中,您想要播放游戏中的声音,但是当游戏退出时,就不应再播放声音。通常,您根本不会使用 System.exit(0) 退出应用程序 - 特别是在任意剪辑播放完毕后...

但是,在此示例中,您可以使用 CountDownLatch

final CountDownLatch clipDone = new CountDownLatch(1);
clip.addLineListener(new LineListener() {
@Override
public void update(LineEvent event) {
if (event.getType() == LineEvent.Type.STOP) {
event.getLine().close();
clipDone.countDown();
}
}
});
// play the sound clip and wait until it is done
clip.start();
clipDone.await();

关于javax.sound.sampled.clip 在播放声音之前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22035768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com