Воспроизведение небольших звуков в игре Java

В компьютерной игре, которую я делаю, я, очевидно, хочу включить звук. До сих пор я использовал AudioClip для воспроизведения файлов WAV. Хотя этот подход работает нормально, файлы WAV, как правило, огромны. Несколько секунд звука в итоге составляют сотни килобайт. Я столкнулся с тем, что при загрузке игры 95% аудио!

Очевидным вариантом здесь было бы использовать MP3 или Ogg Vorbis. Но у меня был ограниченный успех - я могу воспроизводить MP3 с помощью JLayer (но он воспроизводится в том же потоке). Что касается Огга, мне совсем не повезло. Хуже того, юридический статус JLayer несколько сомнительный.

Итак, мой вопрос как к Java-разработчикам, так и к людям, которые действительно кое-что знают о звуке: что мне делать? Могу ли я как-нибудь "обрезать жир" с моих WAV-файлов? Есть ли способ поиграть в Ogg на Java? Есть ли другой звуковой формат, который мне следует использовать вместо этого?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
10
0
7 355
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Они могут быть устаревшими, но они официально признаны командой Xiph.org (которая, среди прочего, поддерживает Ogg и Vorbis). http://www.vorbis.com/software/#java

Описанная вами проблема решается с помощью интерфейса поставщика услуг (SPI) для звука в Java. В результате простое добавление файлов JAR в путь к классам добавит функциональности стандартному Java Sound API. Это позволяет обрабатывать больше звуковых форматов без изменения кода.

В прошлый раз, когда я попробовал это, люди Javazoom предложили рабочий MP3 SPI JAR. Это было основано на упомянутом вами JLayer.

Для Vorbis OGG теперь, похоже, также есть библиотека SPI. Ознакомьтесь с документацией по Vorbis SPI на Javazoom.

Если вы решите остаться с форматом wav ...

Иметь качественные звуковые файлы, наверное, не очень важно. Вы можете использовать свой любимый редактор WAV, чтобы снизить битрейт, переключиться на моно или и то, и другое. Это сэкономит массу места, и вы не заметите разницы в качестве во время игры.

Надеюсь это поможет.

Ответ принят как подходящий

Вы можете использовать библиотеку JOrbis для воспроизведения музыки OGG. Для использования рабочего образца вы можете посмотреть эти файлы здесь.

Я также экспериментировал с некоторым сжатием звука без потерь, например, у меня был 16-битный монофонический звук. Я разделил верхний и нижний байты каждого сэмпла и поместил их друг за другом. Затем я применил дифференциальную замену, при которой каждый байт заменяется его отличием от последнего байта. И, наконец, использовал GZIP для сжатия данных. Мне удалось уменьшить размер данных до 50-60% от исходного. К сожалению, этого оказалось недостаточно, поэтому я обратился к формату OGG.

Одна вещь, которую я заметил с 8-битной музыкой, заключается в том, что если я изменяю громкость звука, воспроизведение становится очень шумным. Я решил эту проблему, повысив дискретизацию аудиоданных до 16 бит прямо перед SourceDataLine.write ().

Блестяще! Ранее я смотрел на JOrbis, но его кажущееся полное отсутствие документации не позволило мне понять, как на самом деле указать его на файл .ogg и заставить звук исходить из динамика.

Zarkonnen 12.06.2009 17:28

Я собрал JOrbis, VorbisSPI и Tritonus-Share в одной библиотеке, поэтому вы можете использовать Java Sound API (AudioSystem) для декодирования файлов Java. связь

Trilarion 25.01.2013 01:44

Другие вопросы по теме