2008-10-28 19 views
10

Para el juego de computadora que estoy haciendo, obviamente quiero reproducir sonido. Hasta ahora, he estado usando AudioClip para reproducir archivos WAV. Si bien este enfoque funciona bien, los archivos WAV tienden a ser gigantescos. Unos segundos de sonido terminan siendo cientos de kB. ¡Tengo que hacer una descarga del juego con un 95% de audio!Reproducción de sonidos pequeños en el juego de Java

La opción obvia aquí sería usar MP3 u Ogg Vorbis. Pero he tenido un éxito limitado con esto: puedo reproducir MP3 usando JLayer (pero se reproduce en el mismo hilo). En cuanto a Ogg, no he tenido suerte en absoluto. Peor aún, el estado legal de JLayer es un poco dudoso.

Mi pregunta es tanto para los desarrolladores de Java como para las personas que realmente saben algo sobre el sonido: ¿Qué debo hacer? ¿Puedo de alguna manera "recortar la grasa" de mis WAV? ¿Hay alguna forma de jugar Ogg en Java? ¿Hay algún otro formato de sonido que deba usar en su lugar?

Respuesta

4

Puede usar la biblioteca JOrbis para reproducir música OGG. Para el uso de muestra de trabajo, puede consultar estos archivos here.

También experimenté con una compresión de audio sin pérdida, por ejemplo, tenía un sonido mono de 16 bits. Separé los bytes superior e inferior de cada muestra y los puse uno detrás del otro. Luego apliqué un reemplazo diferencial donde cada byte se reemplaza por su diferencia con el último byte. Y finalmente usé GZIP para comprimir los datos. Pude reducir el tamaño de los datos al 50-60% del tamaño original. Lamentablemente, esto no fue suficiente, así que recurrí al formato OGG.

Una cosa que noté con la música de 8 bits es que si cambio el volumen de audio, la reproducción se vuelve muy ruidosa. Resolví este problema subiendo los datos de audio a 16 bits justo antes de SourceDataLine.write().

+0

Brilliant! Antes miraba JOrbis, pero su aparente falta total de documentación no me permitía encontrar la forma de apuntarlo a un archivo .ogg y hacer que los sonidos salieran del altavoz. – Zarkonnen

+0

He reunido JOrbis, VorbisSPI y Tritonus-Share en una sola biblioteca, por lo que puede usar Java Sound API (AudioSystem) para decodificar archivos Java. [enlace] (http://www.twelvepm.de/vorbis/) – Trilarion

2

El problema que describe lo aborda la Interfaz del proveedor de servicios (SPI) para el sonido en Java. El resultado es que la simple adición de archivos JAR a su classpath agregará funcionalidad a la Java Sound API predeterminada. Permitiendo así el manejo de más formatos de sonido sin cambiar el código.

La última vez que probé esto, la gente Javazoom ofreció un MP3 SPI JAR que funcionaba. Que estaba basado en el JLayer que mencionaste.

Para Vorbis OGG ahora también parece haber una biblioteca SPI. Consulte los documentos en el Vorbis SPI en Javazoom.

2

Si decide quedarse con formato wav ...

probablemente no es muy importante contar con archivos de sonido de alta calidad. Puede usar su editor de wav favorito para reducir la velocidad de bits, cambiar a mono o ambos. Eso ahorrará toneladas de espacio y no notarás la diferencia de calidad mientras juegas.

Espero que esto ayude.

Cuestiones relacionadas