reproductor - Reproducción de pequeños sonidos en el juego de Java
reproducir sonido en java netbeans (4)
El problema que describes lo aborda la Interfaz del proveedor de servicios (SPI) para sonido en Java. El resultado es que simplemente al agregar archivos JAR a su classpath se agregará funcionalidad a la API Java Sound predeterminada. Permitiendo así el manejo de más formatos de sonido sin cambiar el código.
La última vez que probé esto, la gente de Javazoom me ofreció un MP3 SPI JAR en funcionamiento. Que estaba basado en el JLayer que mencionaste.
Para Vorbis OGG ahora también parece haber una biblioteca SPI. Consulte los documentos en el SPI de Vorbis en Javazoom.
Para el juego de computadora que estoy haciendo, obviamente quiero reproducir el 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!
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.
Entonces, 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?
Estos pueden estar desactualizados, pero oficialmente son reconocidos por el equipo de Xiph.org (que mantienen Ogg y Vorbis, entre otros). http://www.vorbis.com/software/#java
Si decides quedarte con el formato wav ...
Probablemente no sea muy importante tener 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.
Puede usar la biblioteca JOrbis para reproducir música OGG. Para el uso de muestra de trabajo, puede consultar estos archivos aquí .
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 ().