次のコードを使用して、Java サウンド API を使用してサウンド ファイルを再生しています。
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(stream);
clip.open(inputStream);
clip.start();
Clip.start() メソッドへのメソッド呼び出しはすぐに戻り、システムはサウンド ファイルをバックグラウンド スレッドで再生します。再生が完了するまでメソッドを一時停止したい。
それを行う良い方法はありますか?
編集: Uri からの回答に基づいて、私の最終的な解決策に関心のあるすべての人のために、以下のコードを使用しました:
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 );
}