Я создаю короткий клип, а затем воспроизвожу его, вызывая метод start()
. Затем я вызываю метод drain()
, чтобы заблокировать выполнение до тех пор, пока воспроизведение клипа не будет завершено. Однако при запуске в несколько раз кода ниже, иногда это работает, иногда это не так, и звук останавливается случайным образом до конца.
Mixer mixer = AudioSystem.getMixer(null);
AudioFormat format = new AudioFormat(44100, 8, 1, true, false);
DataLine.Info info = new DataLine.Info(Clip.class, format);
try {
// Create a sound of 1 second
Clip clip = (Clip)mixer.getLine(info);
byte[] b = new byte[44100];
for(int i=0; i<b.length; i++)
b[i] = (byte) (50*Math.sin(i/10.0));
clip.open(format, b, 0, b.length);
clip.setFramePosition(0);
clip.start();
clip.drain();
} catch(LineUnavailableException lue) { lue.printStackTrace(); }
Итак, мой вопрос: это ошибка? или я не понял метод drain()
?