Il progetto Jukebox MP3In 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 STORIAL'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 SPECIFICHEIl sistema, così come da me concepito, deve essere in grado di svolgere le seguenti funzioni:
L'ANALISIL'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'IMPLEMENTAZIONETramite 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:
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:
I REQUISITIIn 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:
RIFERIMENTI
|