User Tools

Site Tools


doc:appunti:linux:sa:mpd

Music Player Daemon

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.

Configurazione del server

Sistema audio ALSA

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.

Test ALSA

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.

Test MP3

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

MP Client

Client per Android

doc/appunti/linux/sa/mpd.txt · Last modified: 2012/08/17 15:14 by niccolo