Linux + OpenAl + Java = Frustrazione

← It feels good to be back home     Piccola patch per il frontend di mplayer →

Questa mattina ho deciso di risolvere un piccolo problema di Diamond Crush con l'audio su linux. Dopo due ore di Google, gcc, man e kate penso di essere arrivato ad un passo dalla meta ma preso più che altro dallo sconforto mi son fermato e non riesco più a proseguire.

Il problema è il seguente: Noi stiamo usando usando Lwjgl come libreria la quale usa a sua volta OpenAL per riprodurre suoni. Essendo quelli di OpenAL di una stupidita infinita hanno deciso bene di usare OSS come libreria di default per tutti gli output. Perché è stupido usare OSS vi starete chiedendo. La risposta è piuttosto semplice. Il motivo principale è che OSS non supporta in alcuna maniera più di un flusso audio e si deve quindi chiudere qualsiasi cosa sia anche minimamente interessato alla scheda audio per far partire il giochino o eseguire i test. Ora io senza musica praticamente non riesco a pensare quando programmo quindi dover spegnere amaroK ogni volta che devo fare una prova è una tortura. I driver di ALSA sono qualitativamente superiori, supportano un numero incredibilmente maggiore di periferiche e funzioni. E, come se non bastasse, OSS è da più di due anni considerato obsoleto e sarà presto rimosso dai sorgenti del kernel. Quindi mi chiedo per quale assurdo motivo usare OSS ma non finisce qui.

La prima cosa che mi è venuta in mente è stata quella di usare il file di configurazione per forzare in qualche modo l'utilizzo di ALSA. Ho scoperto però che il file di configurazione di OpenAL richiede la conoscenza di un linguaggio funzionale come Lisp. Ora. Come possono sperare gli sviluppatori di OpenAL di far diffondere la loro libreria se per configurarla si deve conoscere uno dei linguaggi più difficili e lontani dal pensiero umano?

Ma io che sono Laureando in Ingegneria Informatica non mi sono fatto spaventare. Leggendo esempi di qua e la e un po' di documentazione ho provato a scrivere un piccolo file di configurazione. Risultato dopo 20 minuti di tribolazione scopro che tutti i miei sforzi sono stati vani. OpenAL continua ad usare OSS. Probabilmente ho commesso degli errori nel file di configurazione ma ho deciso di passare oltre.

A questo punto decido di trovare una soluzione un po' più creativa e provare a modificare i sorgenti del giochino. Cerco sui Javadoc di Lwjgl ma la documentazione che trovo mi lascia letteralmente basito. Ci sono 4 righe che non fanno altro che rispiegare quello che già il nome dei parametri mi diceva senza dirmi nulla sul formato che queste fantomatiche stringhe di configurazione devono avere. Provo cosi sul forum. Trovo un solo messaggio in cui è citato ALSA. L'autore ha avuto il mio stesso problema ma non ha mai ricevuto una risposta.

Decido cosi di aprire i sorgenti Lwjgl e scopro che probabilmente le stringhe di configurazione devono essere interpretate da OpenAL e quindi sono in lisp anche queste. Non avendo alcuna voglia di andare per tentativi abbandono per qualche minuto il problema.

Dopo qualche canestro nel lavandino con una palla di gomma mi si accende la lampadina. Apro Google e cerco i sorgenti di OpenAL. Scopro che qualcuno li ha già modificati togliendo tutto quello che non serviva ad eccezione di ALSA. Decido di scaricarli e compilarli. Una volta ottenuto il binario lo sostituisco a quello originale. Faccio partire il gioco ed ecco che funziona. Il suono sembra differente da quello riprodotto da OSS ma non importa. La risposta sembra anche molto più rapida e il gioco procede più fluidamente. Decido quindi di far partire amaroK per provare se i due riescono a convivere e.... Boom! Niente da fare il gioco continua ad aprire il device in modalità bloccante impedendo ad altri di usare la scheda audio.

Ora che mi sono sfogato mi sento decisamente meglio.

Nessun TrackBack

URL TrackBack: http://www.pigaz.org/cgi-bin/mt/mt-tb.cgi/40

Lascia un Commento