В Java, как я могу воспроизводить один и тот же аудиоклип несколько раз одновременно? - PullRequest
5 голосов
/ 06 декабря 2009

Если у меня есть объект java.applet.AudioClip, я могу вызвать play для его воспроизведения один раз. Но если я вызову play несколько раз, клип просто продолжит перезапуск. Кажется, единственный способ обойти это - загрузить несколько экземпляров одного и того же звукового файла. Это кажется расточительным из памяти. В игре, если у меня происходит 20 взрывов, мне нужно будет загрузить 20 экземпляров звукового файла.

Я быстро взглянул на javax.sound, чтобы посмотреть, поможет ли здесь использование его вместо AudioClip. Я не вижу ничего, что указывает на то, что он поддерживает воспроизведение одного и того же клипа несколько раз одновременно.

Можно ли обойтись без загрузки одного и того же звукового файла несколько раз с помощью простого java.applet.AudioClip или с помощью javax.sound?

1 Ответ

6 голосов
/ 06 декабря 2009

Проверьте здесь http://forums.sun.com/thread.jspa?threadID=5370182

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

Вторая идея - написать собственный класс Clip. По сути, все, что вам нужно сделать, это записать некоторые звуковые данные в TargetDataline для их воспроизведения. Он будет обрабатывать буферизацию и играть на правильной скорости сам. Если это все, что вы сделали, вы должны иметь возможность выгрузить несколько раз из одного и того же экземпляра и воспроизвести его несколько раз.


считывает необработанные образцы данных в байтовый массив, и всякий раз, когда необходимо воспроизвести звук, я считываю данные из массива с помощью ByteArrayInputStream, который подается в AudioInputStream. После завершения воспроизведения я просто закрываю клип, и системные ресурсы не теряются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...