Music Player Daemon è un player musicale in architettura client-server, ideale per essere installato su box multimediali oppure - come nel nostro caso - su storage evoluti come il Lacie d2 Network.
Si possono utilizzare numerosi client, prenderemo in esame un client con interfaccia web (da installare sullo stesso Lacie) e un client per smartphone Android.
In generale l'installazione dovrebbe essere semplice e automatica, nel nostro caso invece si sono presentati diversi problemi dovuti all'hardware abbastanza esoterico: il Lacie è un System on a chip ARM, sul quale abbiamo installato una scheda audio USB. Il kernel è un 2.6.32 appositamente compilato (è previsto un aggiornamento alla versione 3), la distribuzione una Debian Sarge.
Anzitutto conviene verificare che il sottositema audio funzioni a dovere. L'hardware audio viene supportato dai driver ALSA inclusi nel kernel, ma noi vogliamo anche la compatibilità con il vecchio sistema OSS (vedremo poi il perché).
Dopo il boot verifichiamo che una scheda audio sia stata rilevata e che i moduli kernel siano stati caricati:
lsusb Bus 001 Device 002: ID 0c76:1607 JMTek, LLC. audio controller ...
lsmod | grep snd snd_usb_audio snd_pcm snd_usb_lib snd_hwdep snd soundcore usbcore ...
Questa è la “vista” dell'hardware audio da parte del sistema ALSA; elenco conciso delle schede audio:
cat /proc/asound/cards 1 [Set ]: USB-Audio - USB Headphone Set USB Headphone Set at usb-orion-ehci.0-1, full speed
elenco delle schede audio e di tutti i device audio digitali:
aplay -l **** List of PLAYBACK Hardware Devices **** card 1: Set [USB Headphone Set], device 0: USB Audio [USB Audio] Subdevices: 0/1 Subdevice #0: subdevice #0
elenco dei dispositivi capaci di riprodurre audio PCM:
aplay -L null Discard all samples (playback) or generate zero samples (capture) front:CARD=Set,DEV=0 USB Headphone Set, USB Audio Front speakers surround40:CARD=Set,DEV=0 USB Headphone Set, USB Audio 4.0 Surround output to Front and Rear speakers surround41:CARD=Set,DEV=0 USB Headphone Set, USB Audio 4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=Set,DEV=0 USB Headphone Set, USB Audio 5.0 Surround output to Front, Center and Rear speakers surround51:CARD=Set,DEV=0 USB Headphone Set, USB Audio 5.1 Surround output to Front, Center, Rear and Subwoofer speakers surround71:CARD=Set,DEV=0 USB Headphone Set, USB Audio 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers iec958:CARD=Set,DEV=0 USB Headphone Set, USB Audio IEC958 (S/PDIF) Digital Audio Output
Il problema principale è che alla scheda audio viene assegnato l'identificativo #1, mentre tutti i programmi Alsa per impostazione predefinita usano la scheda #0.
Il primo problema lo incontriamo con il comando aplay
che non sa quale dispositivo audio utilizzare:
aplay /usr/share/sounds/alsa/Front_Center.wav ALSA lib confmisc.c:768:(parse_card) cannot find card '0' ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory ALSA lib conf.c:4649:(snd_config_expand) Evaluate error: No such file or directory ALSA lib pcm.c:2190:(snd_pcm_open_noupdate) Unknown PCM default aplay: main:654: audio open error: No such file or directory
Specificando il dispositivo si ha un miglioramento, ma resta il problema del numero di canali: il file audio è mono, mentre il device è stereo:
aplay --device='front:CARD=Set,DEV=0' /usr/share/sounds/alsa/Front_Center.wav Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono aplay: set_params:1059: Channels count non available
Lo stesso identico risultato si ottiene usando hw:1,0
(scheda audio #1, device #0) al posto della stringa descrittiva CARD=Set,DEV=0
.
Anche il mixer Alsa non funziona alla prima:
alsamixer cannot open mixer: No such file or directory
La soluzione a tutti i problemi è creare un file di configurazione /etc/asound.conf
:
# Give an alias to PCM device hw:1,0 (card 1, device 0): pcm.def_pcm { type hw card 1 device 0 } # Default (virtual) PCM device goes through the "plug" plugin (which does # rate and channels resampling on-the-fly) to the real PCM device: pcm.!default { type plug slave { pcm def_pcm } } # Default control (e.g. for mixer) is card 1: ctl.!default { type hw card 1
Il file di configurazione vale per tutto il sistema, il singolo utente può crearsi un .asoundrc
alternativo. Viene utilizzato per definire alias, device virtuali che combinano funzioni di pre o post-processing, … In generale non dovrebbe essere necessario, vedere la documentazione relativa.
Dopo che il sistema Alsa è stato configurato e collaudato, è possibile testare il funzionamento del decoding mp3:
mpg321 -o alsa track001.mp3
nel nostro caso specifico ci sono dei problemi di qualità: l'audio è disturbato e di pessima qualità.