Я создаю короткий клип, а затем воспроизвожу его, вызывая метод 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()?
