Pregunta

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. Me enfrento a tener una descarga de juego que es 95% de audio!

La opción obvia aquí sería usar MP3 o 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.

Entonces, mi pregunta es para los desarrolladores de Java y, en general, para las personas que realmente saben algo acerca del sonido: ¿Qué hago? ¿Puedo de alguna manera " recortar la grasa " fuera de mi WAVs? ¿Hay alguna manera de jugar Ogg en Java? ¿Hay algún otro formato de sonido que deba usar en su lugar?

¿Fue útil?

Solución

Puedes usar la biblioteca JOrbis para reproducir música OGG. Para ver el ejemplo de uso, puede ver estos archivos aquí .

También experimenté con cierta 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. Desafortunadamente, 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 del audio, la reproducción se vuelve muy ruidosa. Resolví este problema al muestrear los datos de audio a 16 bits justo antes de SourceDataLine.write ().

Otros consejos

Estos pueden estar desactualizados, pero son reconocidos oficialmente por el equipo de Xiph.org (que mantiene a Ogg y Vorbis, entre otros). http://www.vorbis.com/software/#java

El problema que usted describe se resuelve en la interfaz del proveedor de servicios (SPI) para el sonido en Java. El resultado es que simplemente agregar archivos JAR a su ruta de clase agregará funcionalidad a la API de sonido Java predeterminada. De este modo, se permite el manejo de más formatos de sonido sin cambiar el código.

La última vez que probé esto, las personas Javazoom ofrecieron un SPAR JAR de MP3 que funcionaba. Que se basó en el JLayer que mencionaste.

Para Vorbis OGG ahora también parece haber una biblioteca SPI. Echa un vistazo a los documentos en Vorbis SPI en Javazoom.

Si decides quedarte con el formato wav ...

Probablemente no sea muy importante tener archivos de sonido de alta calidad. Puede usar su editor wav favorito para reducir la tasa de bits, cambiar a mono o ambos. Eso ahorrará mucho espacio y no notará la diferencia de calidad mientras juega el juego.

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top