Puesto al día el 7 de enero de 2021.
instalación
sudo apt install mpd
[borrador] instalación de la última versión de mpd
hay paquetes (no oficiales) de la última versión de mpd (0.22 a enero de 2021) para raspbian en el repositorio de kaliko, sólo para armhf:
dpkg --print-architecture
armhf
no sirve cualquier otra respuesta de dpkg --print-architecture
que no sea armhf.
repositorio de kaliko
wget -O /etc/apt/trusted.gpg.d/deb.kaliko.me.gpg https://media.kaliko.me/kaliko.gpg
2021-01-07 16:35:52 (4,16 MB/s) – «/etc/apt/trusted.gpg.d/deb.kaliko.me.gpg» guardado [6246/6246]
sudo nano /etc/apt/sources.list.d/deb.kaliko.me.list
deb https://deb.kaliko.me/raspbian-backports/ stable-backports main
sudo apt update
Obj:3 https://deb.kaliko.me/raspbian-backports stable-backports InRelease
última versión de mpd
sudo apt policy mpd
Tabla de versión:
0.22.3-1~bpo10+2 1
sudo apt remove mpd
Desinstalando mpd (0.19.21-1) …
sudo apt autoremove
sudo apt install mpd/stable-backports
E: No se pudieron corregir los problemas, usted ha retenido paquetes rotos.
configuración
antes de proceder con la configuración de mpd, es necesario detener el servicio mpd.service:
sudo systemctl stop mpd.service
puesto que el propósito de esta configuración es ejecutar mpd como una aplicación local y no como un servicio, hay que desactivar mpd.service:
sudo systemctl disable mpd.service
hecho esto, se crea un directorio local para los archivos de mpd:
mkdir /media/archivo/.mpd
y se copia (si se quiere un ejemplo o modelo) el archivo original de configuración de mpd al directorio local que se acaba de crear:
sudo cp /etc/mpd.conf /media/archivo/.mpd
luego, se crean todos los otros archivos que mpd necesita:
touch /media/archivo/.mpd/{mpd.db,mpd.log,mpd.pid,mpd.state,mpd.sql}
ls /media/archivo/.mpd
mpd.conf mpd.db mpd.log mpd.pid mpd.sql mpd.state
y, por último, se asigna la propiedad de estos cinco archivos al usuario de mpd (nombre en el ejemplo) y se añade dicho usuario al grupo audio:
sudo chown nombre:grupo /media/archivo/.mpd/*
sudo adduser nombre audio
id nombre
uid=1000(nombre) gid=1000(grupo)
grupos=1000(grupo),27(sudo),29(audio)
mpd.conf
mpd.conf es el archivo de configuración de mpd:
nano /media/archivo/.mpd/mpd.conf
music_directory "/media/archivo" playlist_directory "/media/archivo" db_file "/media/archivo/mpd.db" log_file "/media/archivo/mpd.log" pid_file "/media/archivo/mpd.pid" state_file "/media/archivo/mpd.state" sticker_file "/media/archivo/mpd.sql" user "nombre" #group "audio" bind_to_address "192.168.1.7" port "9777" #gapless_mp3_playback "yes" ## DISPOSITIVO DE AUDIO o TARJETA DE SONIDO ## audio_output { type "alsa" name "RB MPD" device "hw:0,0" mixer_type "software" replay_gain_handler "none" } ## EMISIÓN POR HTTP ## audio_output { type "httpd" name "RB MPD Radio" encoder "lame" port "9775" bitrate "192" format "44100:16:1" max_clients "1" } replaygain "auto"
hay más información sobre las opciones de audio_input en «Configuring audio outputs» de Music Player Daemon.
mpd desde rc.local
a continuación, para ejecutar mpd como una aplicación local y no como un servicio del sistema, hay que añadir la siguiente línea a /etc/rc.local:
sudo nano /etc/rc.local
mpd /media/archivo/.mpd/mpd.conf &
donde se ejecuta mpd con el archivo de configuración /media/archivo/.mpd/mpd.conf.
el usuario del servicio rc.local
en versiones recientes de ubuntu como la 18.04, el contenido del código de /etc/rc.local se ejecuta automáticamente como un servicio, pero, al parecer, este servicio no ejecuta mpd con el usuario que corresponde (nombre en el ejemplo) y pulseaudio podría no comportarse como debería con mpd. esto se arregla añadiendo las siguientes líneas a /etc/systemd/system/rc-local.service, en el apartado de service:
sudo nano /etc/systemd/system/rc-local.service
[Service]
User=nombre
PAMName=system-local-login
valga el siguiente como ejemplo de rc-local.service:
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target
[Service]
User=ernesto
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
PAMName=system-local-login
[Install]
WantedBy=multi-user.target
salida de audio
el comando aplay
, mediante la opción -l
o --list-devices
(list all soundcards and digital audio devices), permite averiguar qué tarjetas de sonido hay disponibles en el sistema operativo:
aplay -l
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
lo que equivale a decir «device hw:0,0» (card 0, device 0) en la definición de la salida de audio (audio_output) del archivo de configuración mpd.conf.
el comando aplay
se incluye en el paquete alsautils:
sudo apt install alsautils
alsa o pulse como tipo de audio_output
alsa únicamente opera con una fuente de sonido a la vez, así que, en un sistema operativo descabezado o headless, cumple sin problema.
pulseaudio, por su parte, es un servidor de sonido que permite múltiples fuentes de sonido a la vez. luego, si se van a ejecutar varias fuentes de sonido a un tiempo y/o no se quiere que mpd ocupe en exclusiva la salida de audio, debería declararse «pulse» como type del audio_output:
audio_output { type "pulse" }
hifiberry dac+
si se dispone de una tarjeta de sonido hifiberry dac+, la configuración del audio_output de mpd.conf debería declararse como sigue:
## HIFIBERRY DAC+ ## audio_output { type "alsa" name "RB MPD" device "hw:0,0" mixer_control "Digital" mixer_device "hw:0" mixer_index "0" mixer_type "hardware" replay_gain_handler "none" }
donde el dispositivo de mezcla hw:0 (mixer_device), esto es, el hardware de la tarjeta de sonido hifiberry dac+, se ocupa de de la mezcla (mixer_type). por su parte, el mezclador Digital (mixer_control) se encarga del control del volumen.
creative stage 2.1 o los dispositivos que se desconectan
ciertos dispositivos, si no reciben una señal de sonido constante por parte de su auxiliar, se desconectan (que no apagan) y, en el caso de los altavoces creative stage 2.1, tardan unos segundos en volver a emitir ningún sonido.
mpd dispone de la opción always_on para tratar de evitar la desconexión:
## CREATIVE STAGE 2.1 ## audio_output { type "alsa" name "RB MPD" device "hw:0,0" mixer_type "software" replay_gain_handler "none" always_on "yes" }
si la opción always_on no funciona, aún cabe otra posibilidad, que es el bloque input_cache (a partir de la versión 0.21, al menos):
## CREATIVE STAGE 2.1 ## input_cache { size "128 MB" }
problemario
consulta del registro (log) de mpd
tail -n 25 /media/archivo/.mpd/mpd.log
Dec 24 13:08 : player: played «archivo/Radiohead/Hail to the Thief/03 sail to the moon brush the cobwebs out of the sky.mp3»
base de datos corrupta
si se obtiene el siguiente error al comprobar el estado del servicio de mpd:
sudo systemctl status mpd.service
dic 23 18:13:35 RB systemd[1]: Started Music Player Daemon.
dic 23 18:13:36 RB mpd[2574]: Dec 23 18:13 : db: Database corrupted
debe ejecutarse la siguiente orden:
sudo mpd --create-db
luego, ya se puede actualizar la base de datos desde un cliente:
sudo mpc update
hay más información al respecto aquí.
mpd activo y escuchando en la dirección y puerto establecidos en mpd.conf
sudo netstat -tlpn
tcp 0 0 192.168.1.7:9777 0.0.0.0:* LISTEN 3319/mpd
a 01/2016, se da este caso en el arranque de osmc:
socket: Failed to bind to ‘192.168.1.7:9777’: Cannot assign requested address
but why?
no hay sonido después de todo
aplay -l
aplay: device_list:268: no soundcards found…
si no se han encontrado tarjetas de sonido, ejecútese lsmod y, si no aparece el nombre snd-bcm2835 en la lista de módulos, añádase «snd-bcm2835» a /etc/modules:
sudo nano /etc/modules
snd-bcm2835
que equivale a la orden:
sudo modprobe snd-bcm2835
en el arranque.
determinar la salida de audio
sudo raspi-config
- 7 Advanced options
- A4 Audio
- hay tres salidas:
- 0 Auto
- 1 Force 3.5mm (‘headphone’) jack
- 2 Force HDMI
ruido con mpd
por último, si el sonido arrastra ruido, cabe hacerse con una buena fuente de alimentación y un cable USB con filtro para el ruido (ferrite bead) o una tarjeta de sonido.