Воспроизведение небольших звуков в игре Java - PullRequest
10 голосов
/ 28 октября 2008

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

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

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

Ответы [ 4 ]

4 голосов
/ 12 июня 2009

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

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

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

2 голосов
/ 28 октября 2008

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

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

Для Vorbis OGG теперь, похоже, также есть библиотека SPI. Проверьте документы на Vorbis SPI на Javazoom.

2 голосов
/ 28 октября 2008

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

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

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

2 голосов
/ 28 октября 2008

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

...