Airport Express Linux streaming con Amarok
A pesar de mi switch de Linux a Mac OS X, aún la nostalgia me hace tener mi Linux Desktop lo más niquelado posible. Esta vez era el turno de configurar mi Airport Express con Amarok, y escuchar mi música vía Wi-Fi con uno de los mejores clientes de música que he visto después de iTunes.
Googleando un poco, sacando información y HOWTO’s de Internet y aplicando algunos conocimientos del operativo llegué a una correcta configuración de mi equipo. Y esta vez fue necesario compilar algunas cosillas y tirar del terminal, tan típico de las instalaciones y configuraciones Linux. La referencia más útil para redactar este HOWTO la encontré en esta URL.
Entrando en materia, mi configuración se basa en una distribución Ubuntu Edgy Kernel 2.6.17 con un Airport Express de Apple de reciente adquisición (más bien actualización, debido a la muerte inesperada de mi anterior Airport Express). Los elementos necesarios para llevar a cabo la correcta configuración son:
- Raop Play y sus fuentes.
- Airport Express con firmware correctamente actualizado.
- Módulos ALSA instalados en el sistema.
- Paquetes de C y C++ correctamente instalados.
- Un poco de paciencia.
Raop Play es una implementación por línea de comandos en Linux del JustePort creado por Jon Lech Johansen (más conocido como DVD Jon) y programa diseñado por ingeniería inversa para realizar streaming de Audio con el Airport Express. Todo un ejemplar trabajo de hacking.
Para poder compilar Raop Play necesitaremos tener instalado en nuestro Linux los paquetes gcc y gcc++. Si no es así simplemente los instalamos por línea de comandos (también es posible con el asistente gráfico de paquetes, tanto de KDE como de Gnome):
$ sudo aptitude install gcc $ sudo aptitude install gcc++
Bajamos las fuentes de Raop Play y lo instalamos. Primero descomprimimos el paquete de las fuentes, cambiando primero al directorio al que queramos que se descomprima:
$ tar -zxvf raop_play-0.5.1.tar.gz $ cd raop_play-0.5.1
Antes de compilar e instalar debemos cerciorarnos de tener instalados los paquetes requeridos por Raop Play, descritos en la página del programa. Los instalamos mediante:
$ sudo aptitude install libssl libssl-dev libfltk1.1-dev libfltk1.1c102 fluid libglib2.0-dev libsamplerate0 libsamplerate0-dev libid3tag0 libid3tag0-dev
Para que posteriormente podamos reproducir los formatos MP3, OGG, AAC y FLAC, tendremos que instalar (si ya no lo están) otros paquetes:
$ sudo aptitude install mpg321 ogg123 faad flac
Si alguno de estos paquetes no se encuentran en vuestro repositorio, puede que tengáis que añadir los multiverse en el /etc/apt/sources.list. Podéis informaros sobre listas de repositorios para Ubuntu Edgy.
Una vez instalados o comprobados los paquetes necesarios es hora de compilar e instalar Raop Play. Verificamos primero que no hemos cambiado de directorio y que estamos en el directorio que hemos descomprimido raop_play-0.5.1.
$ ./configure $ make $ sudo make install
Cuando hacemos el ./configure nos fijamos en los mensajes que se van mostrando, por si hay algún error que sepamos qué nos falta o qué tenemos que hacer. En mi caso comprobé que no tenía el compilador de C++ instalado, ya que no lo encontraba en la compilación. Tras compilarlo con make e instalarlo con make install, ya tendremos preparado Raop Play para funcionar, aunque todavía nos quedará configurar nuestro dispositivo.
En realidad ya podemos hacer streaming de audio por línea de comandos, pero nuestro objetivo es poder configurar un cliente de música, como Amarok, para hacer el streaming. Si queremos ver que todo funciona podemos comprobarlo en el terminal, siempre y cuando el Airport Express esté conectado correctamente a la red:
$ aexcl_play --aexip "la-IP-de-nuestro-Airport-Express" "directorio-de-musica"
Esto nos abrirá un pequeño interfaz gráfico para manejar la música que estamos reproduciendo a través del Airport. Pero también podemos hacerlo en terminal puro y duro. Simplemente ejecutamos un comando para que nos reproduzca un archivo de música:
$ raop_play "IP-de-nuestro-Airport-Express" "ruta-archivo"
Lo que hace Raop Play es configurar al Airport Express como nuestra segunda tarjeta de sonido a través de un driver de ALSA. Para configurarlo, en el directorio raop_play-0.5.1/drivers/ tenemos un script llamado driver_start, que lo único que hace es dirigir nuestra salida de sonido hacia la segunda tarjeta de sonido virtual para poder reproducir con Amarok u otro reproductor de música. Pero en vez de este script vamos a generar nuestros propios scripts para arrancar y parar Raop Play cada vez que vayamos a hacer nuestro streaming.
Nuestro primer script será una modificación del driver_start. Creamos el script desde el terminal. Al mío lo he he llamado load_AEX-driver, y lo podemos editar con cualquier editor de Linux (vi, Emacs, gedit…):
#!/bin/sh module=alsa_raoppcm devnode=/tmp/pcmout if ! grep "^$module" /proc/modules > /dev/null; then /sbin/modprobe alsa_raoppcm fi major='sed -n -r "s/(^[0-9]+) pcmout/\\1/p" /proc/devices' if [ -c $devnode ]; then rm -f $devnode; fi mknod $devnode c $major 0
Una vez creado este script (en vez de crearlo de cero, se podía haber modificado directamente el driver_start), creamos un script para lanzarlo y otro para detenerlo. El primero lo llamamos start_AEX:
#!/bin/bash sudo load_AEX-driver raop_play "IP-del-Airport-Express" /tmp/pcmout &
Y ahora el script para detenerlo y poder dejar libre el Airport Express una vez que hayamos terminado de hacer nuestro streaming:
#!/bin/bash killall -9 raop_play
En mi caso no generé este último script al contener tan sólo un comando de terminal, y me costaba lo mismo ejecutar un script que teclear un comando. Pero a gustos colores.
Pues todo el cacharreo por terminal ya está hecho, ahora sólo nos queda configurar nuestro cliente de streaming, en este caso el Amarok. Es muy fácil, sólo tenemos que ir al menú Settings (Preferencias) y seleccionar el tab Engine y configuramos el Xine Engine. Seleccionamos como salida de sonido Alsa y cambiamos el dispositivo de salida, tanto en Mono, como en Estéreo. La salida por defecto para el driver Alsa de Raop Play es hw:1,0 para ambos (mono y estéreo), aunque si tenéis esa salida ocupada por cualquier otro dispositivo (tarjeta de televisión, tarjeta de sonido secundaria, etc…) vais probando con hw:2,0, hw:3,0, … hasta que encontréis vuestra salida libre para hacer el streaming con Airport Express. En mi caso tuve que usar hw:2,0, ya que la 1 tenía ocupada.
Una vez configurado Amarok, ya está todo listo para escuchar vuestra música inalámbricamente. Lo que sí vais a comprobar es que cuando comienza la reproducción con “Play” en el Amarok hay un retraso respecto a la información del interfaz gráfico. Es decir, la música llegará unos 8 ó 10 segundos después de haber empezado a reproducir. Pero una vez pasado ese intervalo de tiempo todo funcionará correctamente.
Pues estos han sido todos los pasos necesarios para hacer funcionar Airtunes mediante Amarok. Visto así no parece muy difícil, pero cuando faltan paquetes o hay malas configuraciones por el sistema las cosas se pueden complicar. Espero que por lo menos este mini HOWTO ayude un poco a aquellos novatos o iniciados en Linux y amantes del hardware de Apple.
