Il progetto Jukebox MP3
In questa pagina voglio raccogliere gli appunti riguardanti l'analisi e le fasi implementative
di un progetto che sto portando avanti da moltissimo tempo, inizialmente pensato come un player
di file MP3 per auto, continuamente evoluto grazie a idee che mi son venute nel tempo.
LA STORIA
L'idea di partenza era quella di poter disporre in automobile di un jukebox in grado
di suonare gli MP3 contenuti in un HD, il tutto pilotato da un diplay LCD a caratteri
e una serie di bottoni collegati alla porta PS/2 ottenuti cannibalizzando una tastiera
oppure un tastierino numerico. Il software iniziale si basava sul progetto
MP3 Server Box,
con alcuni miglioramenti agli script PERL, sostanzialmente per ricordarsi il volume
impostato al riavvio della macchina, per gestire correttamente i file aggiornati
(ad esempio con i TAG MP3 corretti in seguito all'archiviazione) e con un'interfaccia
PHP più funzionale.
L'evoluzione di tale progetto prevedeva invece l'utilizzo di uno schermo LCD
sensibile al tocco, dove venivano visualizzate tutte le opzioni sotto forma
di bottoni e la lista delle canzoni presenti nell'HD, raggruppate per album.
Questo secondo programma è stato realizzato in VisualBasic, in quanto in poco
tempo sono riuscito ad ottenere un'ottima interfaccia grafica, altamente
personalizzabile, che permetteva di modificare tutti i parametri necessari
col semplice tocco di un dito. La cosa però che non mi piaceva era il fatto
che il software doveva girare su Windows 98, in quanto oltre a rendere
abbastanza pesante il sistema rendeva di fatto impossibile ottenere uno
spegnimento immediato dell'hardware, pena la successiva analisi di tutto il disco.
Precedentente infatti avevo già realizzato qualcosa del genere sotto Linux
(un sistema embedded in grado di eseguire file MP3 continuamente, utilizzato
per la riproduzione di musica ambientale in locali pubblici) e la cosa che
più mi aveva soddisfatto era quella di aver ridotto il sistema operativo
all'osso (16 mega), installato in un diskchip non volatile. L'hardware poteva
venir acceso e spento senza nessun timore di danneggiare il filesystem, e in
pochi secondi il sistema era pienamente operativo.
Sono quindi tornato all'idea originale di utilizzare Linux, cercando di
realizzare un programma che implementasse l'interfaccia grafica utilizzando
le librerie gdk/gtk e la gestione dell'audio utilizzando la libreria mad.
Nel frattempo però visto che si aveva a disposizione anche un display LCD
si è pensato che altre funzionalità era possibile aggiungere: la prima
ovviamente era quella di navigatore satellitare, poi la possibilita' di
vedere DVD video e filmati DivX, infine quella di installarci anche
il M.A.M.E. per permettere qualche ora di svago nei tempi morti
(spero non durante la guida!).
LE SPECIFICHE
Il sistema, così come da me concepito, deve essere in grado di svolgere le seguenti funzioni:
- Player DVD, SVCD, VCD, CD audio
- Player di CD/DVD contenti filmati DivX, MPEG o altro formato
- Player di CD/DVD contenti file MP3, ogg o altro formato audio
- Visualizzatore di CD/DVD contenenti immagini grafiche
- Jukebox MP3
- Navigatore satellitare
- M.A.M.E.
L'ANALISI
L'interfaccia deve essere molto chiara, semplice ed intuitiva, facilmente utilizzabile anche in
caso di guida.
Alcune considerazioni riguardo il monitor LCD: inizialmente ero propenso a progettare un sistema
completamente pilotato da uno schermo sensibile al tocco. Col senno di poi e con l'aggiunta di
nuove feature, come ad esempio la visione di film o l'utilizzo di MAME, mi sono reso conto che
è comunque necessario aggiungere dei bottoni esterni per la gestione degli eventi (ad esempio
il passaggio al capitolo successivo, oppure la gestione del volume). La soluzione quindi verso cui
propendo al momento è quella di utilizzare una tastiera composta da un cursore a quattro posizioni
più otto pulsanti che mi ricavo dalla cannibalizzazione di un joystick USB (nelle schede embedded
infatti solitamente non è presente la porta giochi. Ho preferito la porta joystick alla tastiera
tradizionale perché anche se non sembra mi risulta più facile gestire gli eventi e, una volta scritto
il codice necessario per gestirla, è relativamente semplice inserirlo all'interno dei software che
non lo prevede, simulando la pressione dei tasti oppure chiamando direttamente funzioni del programma.
Per la gestione del volume al momento utilizzo due tasti del joystick, ritengo però più comodo
l'utilizzo di un dispositivo
PowerMate che,
oltre a farmi gestire il volume a livello di sistema e non di singola applicazione, mi permette con
la pressione della manopola di ottenere anche la funzione mute.
Sempre a proposito di USB mi sono documentato in rete circa il supporto da parte di Linux e ho convenuto che anche per quello che riguarda il ricevitore GPS sia il caso di abbandonare l'idea di utilizzare un dispositivo che si collega alla porta seriale; questo per due motivi: mentre i modelli seriali richiedono l'alimentazione separata, solitamente prendendola dalla porta PS/2, i modelli USB la prendono direttamente e quindi non sono necessari cavi aggiuntivi; inoltre l'idea generale dei produttori è quella di far sparire le porte seriali a vantaggio di quelle USB, anche se penso che nelle schede embedded general pourpose le seriali resteranno ancora molto, soprattutto per la comodità di creazione di interfacce di comunicazione con circuiti autocostruiti.
A tale proposito stiamo valutando col mio amico Guido, che risulta molto interessato, la gestione (visualizzazione in tempo reale e archiviazione per statistiche) dei segnali provenienti dalla porta OBDII dell'automobile, che comprendono l'ora di accensione e spegnimento del motore, la velocità attuale, i giri del motore, i chilometri percorsi. Non so ancora molto di ciò e necessito dell'interfaccia per fare le prove, ma reputo sia una feature molto interessante.
L'IMPLEMENTAZIONE
Tramite il programma CDDE viene controllato l'inserimento di CD all'interno del lettore:
nel caso venga inserito un supporto il sistema si comporterà in maniera differente in base
alla natura dello stesso. I casi previsti al momento sono i seguenti:
DVD video
|
Viene eseguito mplayer
|
VideoCD
|
Viene eseguito mplayer
|
SuperVideoCD
|
Viene eseguito mplayer
|
CD audio
|
Viene eseguiro XMMS
|
CD o DVD dati
|
Occorre analizzare il contenuto
|
Mentre i primi casi sono tutti facilmente gestibili utilizzando il visualizzatore adatto,
nell'ultimo occorre fare una analisi dei file contenuti nel supporto per capire di cosa
si tratta. Ho voluto distinguere i seguenti casi:
In pratica nel momento in cui viene inserito un CD riconosciuto come contenente dati
viene fatta una scansione di tutto il suo contenuto per verificare se sono presenti
filmati video, file audio oppure immagini; in base al tipo di file presenti il
sistema di comporta in maniera differente:
Un filmato
|
Il caso più semplice: se il CD contiene solamente un filmato, solitamente in formato DivX, allora viene invocato direttamente il visualizzatore video per la riproduzione.
|
Più di un filmato (ed eventuali immagini e file audio)
|
In questo caso occorre visualizzare all'utente un menù attraverso il quale possa scegliere quale film guardare, oppure se ascoltare la musica oppure guardare le immagini.
|
Immagini
|
Se il CD contiene solamente immagini allora viene lasciato un visualizzatore in grado di mostrarle a tutto schermo, con possibilità di slideshow configurabile.
|
Audio
|
Quando il CD contiene file audio viene lanciato un player audio con interfaccia a tutto schermo in grado di visualizzare la playllist e i dati della canzone attualmente ascoltata.
|
Immagini e audio
|
Anche in questo caso occorre chiedere all'utente cosa voglia fare, se guardare le immagini oppure se ascoltare l'audio: in base alla scelta effettuata si comporta come nei singoli casi precedenti.
|
I REQUISITI
In questo momento il prototipo gira su un Pentium II 350Mhz con 128MB di RAM, Matrox G200,
scheda audio SoundBlaster Live! e un HD di 8GB. Il funzionamento è ottimo, nonostante il
processore non sia dei più moderni; d'altra parte ho scelto appositamente tale modello
perché è quello che solitamente si trova nelle schede embedded: già passare al Pentium III
potrebbe causare problemi di riscaldamento, soprattutto se l'hardware deve essere collocato
in una automobile.
Comunque sia i DVD che i filmati DivX vengono visualizzati in maniera fluida, a parte
quando carico la CPU con qualche lavoro in background. Qualche problema lo hanno i
giochi del Mame più corposi, ma il frameskip permette di giocarci senza particolari
problemi.
Una installazione da vettura richiede quindi per una soluzione come quella implementata
da me il seguente hardware:
-
una scheda embedded con processore almeno Pentium II 350MHz, con almeno 128MB di RAM. Non ho
ancora potuto fare esperimenti su qualche modello, quindi non sono in grado di dirvi se può andare bene un qualsiasi chipset grafico integrato oppurre occorra preferire quelli più veloci. Fondamentali poi almeno una porta USB per collegare il joypad e una porta di rete per comunicare con il proprio sistema. Indispensabile invece che abbia la scheda audio incorporata.
-
un display LCD che raggiunga almeno la risoluzione di (800x600)? pixel.
-
un HD capiente, visto che deve contenere sia tutti i dati del Mame (circa 5GB), sia gli MP3. In base allo spazio disponibile poi si può valutare se utilizzarne uno da 3,5" oppure da 2,5".
-
un lettore DVD, preferibilmente slot-in, più che altro per comodità.
-
un joypad USB da pochi soldi da smontare per riciclarne l'elettronica e realizzare quindi i bottoni di controllo del sistema.
-
opzionale: una scheda bluetooth oppure wi-fi per il collegamento alla propria rete casalinga, oppure al PDA.
-
opzionale: un dispositivo PowerMate per la gestione centralizzata del volume.
RIFERIMENTI
-
MPlayer,
visualizzatore di filmati molto potente. Supporta moltissimi formati
video e audio e, sebbene disponga anche di una GUI personalizzabile
tramite skin, risulta molto potente nella gestione da shell.
Supporta in maniera nativa anche la visione di DVD video, VCD e SVCD.
-
Xine, un altro
visualizzatore di filmati molto valido, più immediato da utilizzare a mio
avviso da utenza non pratica di Linux, o che comunque preferisce utilizzare
il desktop per lavorare. Anche questo programma come il precedente consente
la visione di DVD video gestendone i sottotitoli, le diverse tracce audio o
le inquadrature alternative.
-
XMMS è senza dubbio
il miglior player MP3/CDA disponibile su Linux. Nato dalle ceneri di X11amp ed
ispirato a WinAMP, il programma gestisce in maniera avanzata skin e plugin, con
la possibilità di modificare a proprio piacimento non solo l'interfaccia grafica
ma qualsiasi dettaglio del suo funzionamento.
-
Feh, un visualizzatore di immagini molto leggero e privo di GUI: viene eseguito direttamente da command line.
-
CDDE è un
programmino che intercetta quando un CD viene inserito nel lettore CDROM,
individua il tipo di supporto (DVD, VCD, SVCD, CDA) ed esegue uno specifico
comando.
-
Xmame è la versione per Linux
del Multi Arcade Machine Emulator, ovvero un emulatore di oltre 3500 dei giochi da bar
che hanno segnato la storia.
-
GXMame è un potentissimo
frontend per xmame, che si avvicina molto come interfaccia a quella di MAME32. Permette
di scegliere il gioco da una lista dettagliata e riordinabile per vari criteri. Supporta
la visualizzazione dello snapshot del gioco e del titolo, la foto del cabinet e della locandina
originale durante lo scorrimento della lista.
Sul sito mame.dk potete
trovare tutte le informazioni e le novità che riguardano il M.A.M.E., i programmi
inerenti e i giochi supportati.
-
PowerMate
è una manopola da collegare alla porta USB, che permette di simulare la pressione di alcuni tasti
nelle applicazioni. Ora ne hanno realizzato anche una versione Bluetooth.
-
Freediag è
il programma che interroga la porta OBDII dell'automobile per ottenere informazioni
diagnostiche. Sul sito è presente anche la lista delle interfaccia supportate con il
link al produttore.