Logo PJ
Home
Arcade
Musica
Bicicletta
FabLab
Linux
DreamBox
Giochi
 
   Introduzione   Perle   Programmi   SSH   SAMBA   Firewall   GPS   WIFI   Jukebox   PCcar 

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.
Comments