viernes, 10 de abril de 2015

Servidor de Audio en la Raspberry Pi

El objetivo de la presente entrada del blog es hacer un servidor de audio y reproductor de audio por linea de comandos mediante el estándar Music Player Daemon (más info en www.musicpd.org) en nuestra más que versátil Raspberry Pi.

La ventaja de utilizar MPD instalado en la Raspberry Pi, nos permitirá tener múltiples clientes para su gestión (reproducción, administración, etc.) en entornos tan dispares como IPhone, Android, Java, Windows, extensión Firefox, etc... (ver clientes de MPD), y tener un sistema tan sencillo como la placa Raspberry Pi y unos altavoces conectados a esta para tener un entorno sencillo y eficaz como hilo musical / reproductor de audio / centro de audio o centro de streaming de audio.

Vamos a lo interesante que es poner el sistema en marcha.

Instalación
Lo primero de todo es ver si tenemos el módulo asociado al sonido cargado en nuestro entorno, en el caso por defecto de la Raspberry Pi sin ningún módulo usb externo o placas como la HifiBerry o la IQAudio es el bcm2835.

Ejecutaremos la siguiente instrucción:
lsmod | grep snd_bcm2835

y comprobamos si el módulo snd_bcm2835 aparece. Si no aparece, debemos ejecutar el siguiente comando:
sudo modprobe snd_bcm2835

Para que se cargue de manera permanente, editamos el fichero
sudo nano /etc/modules

y añadimos el texto snd_bcm2835, grabamos y reiniciamos (reboot) el sistema.

Ahora es el momento de bajarnos los paquetes necesarios de audio
sudo apt-get install alsa-utils mpd mpc

Configuración
El primer paso es configurar la salida de audio, siendo los valores posibles (0=auto, 1=analógico, 2=HDMI). En nuestro caso queremos utilizar el conector de 3.5mm, a fin de conectar unos simples altavoces pasivos. 

Debemos detectar cual es el gestor de sonido "Playback Route", por lo que ejecutamos la siguiente instrucción:
amixer controls


Veremos que en mi caso es el número 3 (numid=3), así pues configuramos la salida analógica.
amixer cset numid=3 1

Y comprobamos el sonido mediante un par de pruebas.
aplay /usr/share/sounds/alsa/Front_Center.wav
speaker-test -t sine -f 440 -c 2 -s 1

Si vemos que no escuchamos apenas nada, podemos controlar el volumen ejecutando:
alsamixer


Ahora es el momento de configurar el servidor MPD, por lo que lo paramos:
sudo service mpd stop

Lo primero es dar permisos a un par de directorios:
sudo chmod -R g+w /var/lib/mpd
sudo chmod -R g+w /var/run/mpd

Configuraremos el servidor MPD lo más sencillo posible, por lo que editamos el fichero de configuración:
sudo nano /etc/mpd.conf

y comentar la linea bind_to_address "localhost" con el caracter # delante de esta.

Puesta en marcha del servidor MPD
El servicio (demonio) se enciende por defecto cuando se reinicia la Raspberry Pi, pero podemos activarlo mediante la instrucción siguiente:
sudo service mpd start

Para detectar si hay alguna incidencia podemos acceder al fichero de logs:
tail -f /var/log/mpd/mpd.log

Puesta en marcha de un cliente MPD
Una vez tenemos ya el servidor MPD funcionando, podemos tener un cliente en la propia Raspberry Pi, en este caso es el mpc.

Por ejemplo, si queremos acceder a una radio online, es tan sencillo como escoger alguna (recomiendo la web ListenLive.eu en que se encuentran recopiladas muchas por género y país) y la añadimos al servidor mediante la instrucción mpc add.

Como por ejemplo:
mpc add http://emisorasmusicales.com:8000/activafm.mp3

Para activar el cliente y que empiece a sonar:
mpc play

Para detener la música:
mpc stop

Para ver que esta sonando:
mpc status


Recordad que sirve para mp3, listas de reproducción m3u, pls, radio de streaming, etc.

Espero que os resulte útil esta entrada del blog para tener una reproductor de música en la Raspberry Pi, y no dejéis de ver los múltiple clientes MPD que existen, como el MPDroid de Android, ya que son espectaculares (aunque tendréis que configurar más en detalle el fichero mpd.conf)

Notas
El ancho de banda de reproducción vía streaming como la del ejemplo de una fuente de internet es inferior a 20KB/s por lo que no afecta al resto de servicios que corran en paralelo en una Raspberry Pi y que requieran de conectividad de red.