Java проблемы с воспроизведением звуковых клипов - PullRequest
1 голос
/ 17 декабря 2009

У меня проблема с воспроизведением звука в Java с использованием интерфейса Clip .

Воспроизведение звука работает с использованием:

clip = (Clip)mixer.getLine(dataLineInfo);
clip.open(audioFormat, byteData, 0, byteData.length);
clip.start();

Однако, если клипы не закрыты, возникает утечка памяти.

Я попытался добавить слушатель строки перед запуском клипа и использовал следующий код:

public void update(LineEvent e) {
    if (e.getType() == LineEvent.Type.STOP) {
        e.getLine().close();

Однако это приводит к ухудшению звука.

Добавление 1 секунды сна в метод заставляет все работать снова на моей машине - но я бы предпочел более элегантное решение - я не думаю, что ожидание в методе слушателя является хорошей практикой, и другие машины могут занять больше времени. *

Странно, что событие остановки отправляется за произвольное время до остановки звука.

У кого-нибудь есть идеи, как лучше решить эту проблему?

(относится к это , это и это , но ни одно из них не является для меня решением)

1 Ответ

1 голос
/ 18 декабря 2009

Это симптомы, описанные в ошибка 4434125 .

Предлагаемое решение в этих комментариях к ошибке заключается в вызове clip.drain() (в соответствующем потоке, потому что это блокирующий вызов), а затем закрытии клипа после завершения дампа (так как он будет блокироваться до тех пор, пока внутренний буфер строки данных не будет опорожнен (согласно Javadocs для метода стока ).

...