J'utilise le code suivant pour lire un fichier son en utilisant l'API de son java.Comment puis-je attendre la fin d'un clip audio java?
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(stream);
clip.open(inputStream);
clip.start();
L'appel de méthode à la méthode Clip.start() retourne immédiatement, et le système lectures du fichier audio dans un fil de fond. Je veux que ma méthode fasse une pause jusqu'à ce que la lecture soit terminée.
Y at-il une bonne façon de le faire?
EDIT: Pour tout le monde intéressé par ma solution finale, basée sur la réponse d'Uri, j'ai utilisé le code ci-dessous:
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);
}
Cela a fonctionné comme un charme pour une simple application du texte à la parole que je travaillais. – progyammer
Je doute que celui-ci soit une technique gourmande en ressources. – sancho21