Я использую следующий код для воспроизведения звукового файла с использованием API Java-звука.
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(stream);
clip.open(inputStream);
clip.start();
Вызов метода для метода Clip.start () немедленно возвращается, и система воспроизводит звуковой файл в фоновом потоке. Я хочу, чтобы мой метод приостановился до завершения воспроизведения.
Есть ли хороший способ сделать это?
РЕДАКТИРОВАТЬ: Для всех, кто интересуется моим окончательным решением, основываясь на ответе Ури, я использовал следующий код:
private final BlockingQueue<URL> queue = new ArrayBlockingQueue<URL>(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 );
}