View Full Version : [Task 14.2.1] Passaggio da OpenAL a librerie di JavaZoom
BlueDragon
17-04-2006, 03:22
Ciao a tutti,
ho finalmente committato il task che aggiunge la musica in background al gioco.
La musica è in formato mp3, che non è supportato né dalla release standard di Java né da OpenAL, quindi ho dovuto aggiungere delle librerie.
Queste librerie sono:
basicplayer2.3.jar
commons-logging-api.jar
jl1.0.jar
mp3spi1.9.4jar
tritonus_share.jar
Mp3SPI è la libreria che aggiunge il supporto mp3 al JavaSound standard.
Mp3SPI si appoggia alla libreria Tritonus, che è incompatibile con OpenAL (ho rimosso OpenAL da Audio e Sound ed ho passato tutto a JavaSound).
BasicPlayer.jar contiene delle classi per semplificare la gestione del suono.
BasicPlayer si appoggia a jl (JLayer), che usa commons-logging-api per generare dei log.
Al momento i log sono settati al livello "fatal" (vedi file di properties dentro il jar di commons), quindi non dovrebbe apparire nessun log nello standard output..a meno che non ci siano errori fatali :D
Ok, veniamo al sodo:
Per far funzionare il progetto, bisogna:
1) Aggiungere BasicPlaye2.3.jar al build path.
Tasto destro su basicplayer2.3.jar -> Build Path -> Add to Build Path.
2) Aggiungere tutti i jar alla configurazione di Run di Diamonds.
Menu Run -> voce "Run..." -> sezione ClassPath -> click su User Entries -> Add JARs -> scegliete basicplayer2.3.jar e cliccate ok, poi Apply.
Ripetete l'operazione per tutte le altre librerie elencate sopra.
3) Aggiungere tutti i jar alla configurazione di Run di Ant.
Tasto destro su build.xml -> Run As -> Ant Build ... -> sezione ClassPath -> ripete le stesse cose fatte sopra.
Ci sarebbe anche il passo 4, che sarebbe aggiornare il build.xml con il jar del basicplayer affinché i test girinocorrettamente. Ho già committato io il nuovo build.xml, dovreste averlo "gratis" sincronizzando il progetto, però se qualcuno esperto di Ant ci da un'occhiata per sicurezza è meglio...io le modifiche le ho fatte a naso, semplicemente mettendo basicplayer nei punti dove c'erano già le LWJGL :)
A parte il refactoring di Audio e Sound per migrarli da OpenAL a JavaSound, ho solo aggiunto due metodi ad Audio per la gestione della musica di Background.
Uno la fa partire, uno la ferma :P
Non ho messo test per i due metodi...penso che perderò l'uso delle dita per questo, ma al momento vorrei semplicemente finire questo post e committare per levarmi questo task malefico...sono le 4! :D
Buonanotte, buon sound a tutti.. :P
PS: Ho provato a committare il file .classpath che risultava modificato...forse il punto 2) vi viene gratis anch'esso... :)
BlueDragon
17-04-2006, 03:51
Sììììììììììììììììììììììììì la build machine ha compilatooooooooooooooooooooooo :D
http://fcarucci.homeip.net:8080/cruisecontrol/?auto_refresh=true
Il link alla build machine l'ho dovuto chiedere a Jocchan stasera...sul forum c'è scritto ma l'ultima volta non era in uno sticky e ci ho messo un po' di tempo a trovarlo...lo mettiamo in evidenza da qualche parte? :)
Ottimo lavoro, bravo :)
Una piccola regola che ho imparato durante le lunghe notti su BW2: non fare mai il commit mai di notte. Non c'e' fretta, aspetta la mattina, poi scrivi tutti i test necessari e fai il commit con calma. E' preferibile rispetto a un commit alle quattro del mattino quando si e' stanchi.
Complimenti ancora!
FANTASTICO !!!
Ora è un piacere testare :D
Però ogni tanto il suono della collisione col suono non viene generato :( :(
ma non potevamo salvare l'mp3 in un altro formato...? :wtf:
OpenAL lavorava SOLO COL .wav? :mbe:
BlueDragon
17-04-2006, 13:12
ma non potevamo salvare l'mp3 in un altro formato...? :wtf:
OpenAL lavorava SOLO COL .wav? :mbe:
Ho provato a cercare sul forum di LWJGL ed avevo trovato solo dei post di persone che invocavano il supporto mp3 ed ogg...senza successo.
Da quel che ho capito con JavaSound, alla fine alla scheda audio gli devi comunque mandare un formato PCM (tipo wav) e quando usi un mp3 in realtà lo converti prima.
Quindi, se uno converte l'mp3 al volo, potrebbe anche riempire i buffer "wav" di OpenAL. Il problema è che la libreria di conversione mp3 andava in conflitto con quella di OpenAL.
Per tornare alla domanda "OpenAL supporto solo wav?", se quello che ho detto prima è giusto (ma non ne sono sicuro), dovrebbe essere possibile inviare ai buffer di OpenAL qualsiasi formato di suono, a patto di convertirlo prima. Però come si fa?
Le librerie di Javazoom al momento sono una risposta semplice alla necessità di convertire un formato compresso ed inviarlo in maniera comprensibile alla scheda audio.
Sono sicuro che esistano molte altre alternative, alcune delle quali magari mantenevano OpenAL....lavorando al task da solo non potevo seguire tutte le strade..ne ho scelte alcune e non è detto che siano le migliori...se qualcun'altro vuole cimentarsi ben venga! Anche se potrebbe essere YAGNI cercare un'altra soluzione se questa va bene :)
Ho appena finito di farmi una partitina dopo l'update e devo dire che fa molta scena. Finalmente il gioco sta prendendo forma. Purtroppo come openal questo javasound continua ad usare oss invece di alsa. Sono 3 anni che è diventato il nuovo standard e ancora ste librerie non si sono adeguate.
Una volta uccisi tutti i programmi che usano la scheda audio sono riuscito a farlo partire ma il gioco scatta. Le animazioni sono inesistenti, praticamente ingiocabile qui su linux. La cosa più strana è che la cpu non supera mai il 20/30 % ma il gioco continua a scattare.
ciao ;)
Ho appena finito di farmi una partitina dopo l'update e devo dire che fa molta scena. Finalmente il gioco sta prendendo forma. Purtroppo come openal questo javasound continua ad usare oss invece di alsa. Sono 3 anni che è diventato il nuovo standard e ancora ste librerie non si sono adeguate.
Una volta uccisi tutti i programmi che usano la scheda audio sono riuscito a farlo partire ma il gioco scatta. Le animazioni sono inesistenti, praticamente ingiocabile qui su linux. La cosa più strana è che la cpu non supera mai il 20/30 % ma il gioco continua a scattare.
ciao ;)
Su win è perfetto, solo che a volte non si sente il suono delle gemme.
Su win è perfetto, solo che a volte non si sente il suono delle gemme.
Ora mi faccio un ant dist e vedo come va sul portatile. speriamo bene :)
ciao ;)
Ora mi faccio un ant dist e vedo come va sul portatile. speriamo bene :)
ciao ;)
Sul portatile con SuSE è anche peggio ed è un centrino 1.7ghz. :( Su windows non mi parte. Ci sono da sistemare tutti gli script per far partire il gioco e il progetto di eclipse altrimenti qui non parte più niente.
ciao ;)
BlueDragon
17-04-2006, 14:45
Sul portatile con SuSE è anche peggio ed è un centrino 1.7ghz. :( Su windows non mi parte. Ci sono da sistemare tutti gli script per far partire il gioco e il progetto di eclipse altrimenti qui non parte più niente.
ciao ;)
Per quanto riguarda il progetto di eclipse hai seguito i passi che avevo scritto sopra?
Cmq Jocchan mi ha detto che il suo "a volte non si sente" significa il 40%, quindi penso che più tardi proverò questo codice http://home.halden.net/tombr/ogg/ogg.html che dovrebbe permetterci di tornare ad usare OpenAL con supporto ogg (tramite JOrbis che avevi suggerito anche tu Vicius).
Rinnovo l'invito...se qualcuno vuole darmi una mano e provare altre strade si faccia avanti! :) Domani inizia la settimana lavorativa quindi non penso che avrò molto tempo.
Le animazioni sono inesistenti, praticamente ingiocabile qui su linux.)
Almeno da te parte, da me sotto gentoo nemmeno quello.. :(
Sotto Xp invece tutto senza problemi (centrino 1.4)
BlueDragon
17-04-2006, 18:21
Aggiornamento:
sto provando il OpenAL+ogg e sta funzionando :)
Purtroppo però il codice che ho trovato non è completo di funzionalità di looping, ha solo il play (quindi si genera un errore uscendo da Diamond con la musica accesa) e non è perfetta la gestione del buffering (se la CPU è impegnata in altro c'è il rischio che il thread parallelo non si abbastanza veloce nel riempire il buffer di OpenAL).
Ci sto lavorando su ed al momento almeno il problema del buffering sembra risolto... :)
cdimauro
18-04-2006, 08:08
Ho provato a cercare sul forum di LWJGL ed avevo trovato solo dei post di persone che invocavano il supporto mp3 ed ogg...senza successo.
Da quel che ho capito con JavaSound, alla fine alla scheda audio gli devi comunque mandare un formato PCM (tipo wav) e quando usi un mp3 in realtà lo converti prima.
Quindi, se uno converte l'mp3 al volo, potrebbe anche riempire i buffer "wav" di OpenAL.
Attenzione: se la conversione avviene al volo (al momento di suonarne un pezzettino), non ci sono problemi.
Se invece per conversione al volo s'intende la conversione completa (internamente) del file MP3 in WAV e poi suonare quest'ultimo, ci troveremmo di fronte a notevoli problemi causati da:
- tempo di avvio più lento (a causa della conversione);
- mostruosa occupazione di memoria (un file wav stereo a 44,1Khz e 16 bit si "mangia" 176KB di memoria PER OGNI SECONDO di musica).
cdimauro
18-04-2006, 08:11
Ho appena finito di farmi una partitina dopo l'update e devo dire che fa molta scena. Finalmente il gioco sta prendendo forma. Purtroppo come openal questo javasound continua ad usare oss invece di alsa. Sono 3 anni che è diventato il nuovo standard e ancora ste librerie non si sono adeguate.
for(;;)
fork(new_audio_library);
:asd:
Una volta uccisi tutti i programmi che usano la scheda audio sono riuscito a farlo partire ma il gioco scatta. Le animazioni sono inesistenti, praticamente ingiocabile qui su linux. La cosa più strana è che la cpu non supera mai il 20/30 % ma il gioco continua a scattare.
ciao ;)
Setup, Avanti, Avanti, Fine. :asd:
Scusami, ma non ho resistito. :p
BlueDragon
18-04-2006, 09:04
Attenzione: se la conversione avviene al volo (al momento di suonarne un pezzettino), non ci sono problemi.
Se invece per conversione al volo s'intende la conversione completa (internamente) del file MP3 in WAV e poi suonare quest'ultimo, ci troveremmo di fronte a notevoli problemi causati da:
- tempo di avvio più lento (a causa della conversione);
- mostruosa occupazione di memoria (un file wav stereo a 44,1Khz e 16 bit si "mangia" 176KB di memoria PER OGNI SECONDO di musica).
Nono, conversione passo passo :)
for(;;)
fork(new_audio_library);
:asd:
Setup, Avanti, Avanti, Fine. :asd:
Scusami, ma non ho resistito. :p
Io non posso piu' farla questa battuta :(
BD, la conversione da ogg e' molto promettente. Eventualmente in seguito possiamo provare anche a bufferizzare.
for(;;)
fork(new_audio_library);
:asd:
Setup, Avanti, Avanti, Fine. :asd:
Scusami, ma non ho resistito. :p
Tu dannato! Sei il solito fanboy Windows. Apple e OS X sono superiori a Windows in ogn..... uhm ho sbagliato cassetta. :doh: :D
ciao ;)
BlueDragon
19-04-2006, 00:40
Ho committato la nuova versione che usa OpenAL+ogg.
Le nuove librerie sono:
jorbis-0.0.15.jar
jogg-0.0.7.jar
trb.jar
:)
cdimauro
19-04-2006, 08:20
La musica si sente (bene :)), ma appena chiudo la finestra ottengo questo (nella console):
org.lwjgl.openal.OpenALException: OpenAL error: Invalid Operation (40964)
at org.lwjgl.openal.Util.checkALError(Util.java:56)
at org.lwjgl.openal.AL10.alGetSourcei(AL10.java:811)
at trb.sound.OggPlayer.update(OggPlayer.java:168)
at trb.sound.OggPlayer$PlayerThread.run(OggPlayer.java:262)
BlueDragon
19-04-2006, 08:33
La musica si sente (bene :)), ma appena chiudo la finestra ottengo questo (nella console):
org.lwjgl.openal.OpenALException: OpenAL error: Invalid Operation (40964)
at org.lwjgl.openal.Util.checkALError(Util.java:56)
at org.lwjgl.openal.AL10.alGetSourcei(AL10.java:811)
at trb.sound.OggPlayer.update(OggPlayer.java:168)
at trb.sound.OggPlayer$PlayerThread.run(OggPlayer.java:262)
E' dovuto al fatto che a volte Diamonds si chiude più velocemente del thread che suona la musica, distruggendogli l'ambiente audio sotto i piedi :)
Non è carino, ma al momento non dovrebbe essere un problema visto che si verifica solo chiudendo Diamonds e che l'eccezione viene lanciata nell'altro thread ed appare solo in console, non scatena un bug report.
E' dovuto al fatto che a volte Diamonds si chiude più velocemente del thread che suona la musica, distruggendogli l'ambiente audio sotto i piedi :)
Non è carino, ma al momento non dovrebbe essere un problema visto che si verifica solo chiudendo Diamonds e che l'eccezione viene lanciata nell'altro thread ed appare solo in console, non scatena un bug report.
Vorrei comunque un'uscita pulita. Basta fare un wait sull'altro thread alla fine del gameloop di Diamonds. Lo possiamo aggiungere come bug C?
Aggiunto il bug, e meraviglioso l'audio.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.