martes, 29 de diciembre de 2009

Reproductores de multimedia a través de JACK

#########################
Notas de revisiones:
Revisión 0: 29 diciembre 2009. Publicado.
Revisión 1: 17 enero 2010. Retocado texto (nada importante)
Revisión 2: 29 abril 2010. Actualizado a ubuntu lucid lynx
#########################

Como sabemos, cuando JACK está ejecutándose se aborta el audio de toda aplicación que no sea su cliente. Por ello, si jack está activo no podemos escuchar una canción o ver un video en un reproductor multimedia por la misma tarjeta de audio que usa Jack... a menos que consigamos "jackificar" el reproductor. En este caso no solamente podremos escuchar las canciones sin tener que finalizar el servidor jack, sino que además podremos integrar el stream de audio en nuestra sesión, ruteándolo hacia donde nos plazca. Por ejemplo, podemos pasarlo a través de plugins de efectos, ecualización... y/o llevarlo a las entradas de captura de un grabador cliente de jack, por ejemplo, a una pista de Ardour o Audacity.

En esta entrada vamos a mostrar cómo jackificar algunos reproductores populares. En algunos casos, sus salidas se autoconectarán a los system_playbacks y en otros las tendremos que conectar manualmente desde la ventana de conexiones de qjackctl (Jack Control), pestaña Audio. El comportamiento, en cuanto a mostrar los puertos en esta ventana, tampoco es igual para todos. Algunos sólo los mostrarán durante la reproducción y desaparecerán cuando se para. Algún otro será más "jack-friendly" y mostrará puertos mientras la aplicacion esté simplemente levantada. Para los primeros hay un truco para que no desaparezcan los puertos y así poder hacer tranquilamente las conexiones: Reproducir y pausar immediatamente después (el mismo truco que usamos con Audacity cuando va a través de Jack).

Estas instrucciones están probadas en y orientadas hacia ubuntu(studio) 9.10 (karmic) y 10.04 (lucid), aunque en algunos casos el método puede ser similar para otras versiones de ubuntu y para otras distribuciones. Si no se indica lo contrario, todos los reproductores indicados están instalados desde los repositorios oficiales de ubuntu, desde el gestor de paquetes synaptic o método equivalente desde terminal.

La idea de esta entrada no es hacer una evaluación sobre reproductores, cada uno verá. La propuesta es: "Si alguno de estos está entre tus favoritos, aquí tienes cómo hacerlo sonar a través de Jack". He tenido un par de fracasos como veréis. Se agradecen sugerencias. También espero que alguien se anime a aumentar la lista.

Audacious

karmic:
Instalar el paquete audacious-plugins-extra. Lanzamos jack, lanzamos audacious y con botón derecho sobre la barra de arriba, vamos a preferences, audio y elegimos el "Jack Output Plugin".

lucid:
El plugin de salida de jack se incluye ahora en el paquete audacious-plugins. Como éste es una dependencia de audacious, el plugins de jack está presente sin hacer nada. Sólo hay que elegirlo como se indica arriba.

Rhythmbox

Necesitamos el paquete gstreamer0.10-plugins-bad

Ejecutamos (alt + F2 o desde terminal) 'gconf-editor' y en el directorio .../system/gstreamer/0.10/default/ damos el valor 'jackaudiosink' a los nombres 'audiosink', 'chataudiosink' y 'musicaudiosink'. Si no queremos que se autoconecten las salidas del reproductor a los system_playbacks, pondremos: 'jackaudiosink connect=none'

Exaile

Exaile también utiliza gstreamer, así que hay que hacer lo mismo que para rhythmbox. Además, en Editar->Preferencias->Playback, nos aseguramos que el "Audio Sink" es JACK.


VLC

En ubuntu, instalamos el paquete 'vlc-plugin-jack'. Después, desde el menú Herramientas->Preferencias->Audio, elegimos la Salida de Tipo: "Salida de audio JACK".
Si queremos que los puertos de salida se autoconecten a los system_playbacks, editamos:

gedit ~/.config/vlc/vlcrc

En la línea 750, más o menos, (esto en karmic, en lucid, está al principio del archivo) encontramos:

# Automáticamente conectar a clientes escribibles (boolean)
#jack-auto-connect=0

Cambiamos la segunda línea a:
jack-auto-connect=1


Mplayer / gmplayer

Desde línea de comandos, podemos especificar la salida a jack con: 'mplayer -ao jack archivo', para un archivo de audio o video.

Podemos hacer que esto sea permanente editando el archivo '~/.mplayer/config' y añadiendo la línea:

ao=jack

De esta forma, podemos usar mplayer desde línea de comandos, simplemente con 'mplayer archivo'.

(Lo que sigue es válido sólo para karmic, En lucid no existe otro archivo de configuración y ya hemos terminado. Eso sí, hace falta el paquete 'mplayer-gui').

Sin embargo, esto no es suficiente para lanzar mplayer con botón derecho sobre el archivo que queremos reproducir (en gnome al menos, esto invoca a gmplayer). Para ello, editamos el archivo '~/.mplayer/gui.conf' y sustituimos la línea:

ao_driver = "pulse,alsa,sdl:aalib" por:
ao_driver = "jack"

(Podemos poner también 'jack,alsa' o 'jack,pulse' en lugar de 'jack' a secas, tanto en 'config' como en 'gui.conf', para permitir que mplayer use alsa o pulseaudio como segunda opción, si jack no está activo).


Aqualung


No hay que hacer nada. Si jack está activo, funcionará con jack (si no, con pulseaudio o alsa). Además, los puertos de salida se muestran en las conexiones de qjackctl incluso cuando aqualung está parado. Ojalá todos los demás hiceran lo mismo.

Amarok

karmic:
Amarok usa el motor de audio xine. El problema e que la versión de libxine de ubuntu karmic no incluye soporte para jack. Habría que recompilar libxine... o añadir el repositorio PPA de Motin "https://launchpad.net/~motin/+archive/until-jack-is-included-in-main". Vamos a hacer esto último. Si desplegamos la línea "Technical details about this PPA" vemos que las lineas que hay que añadir a /etc/apt/sources.list. Lo podemos hacer de dos maneras, o editando este archivo y añadiendo estas líneas o bien, desde orígenes del software (en el menú "Sistema->Administración"), pestaña otro software, añadir y copiar las líneas. Para obtener la firma, haremos en terminal:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys xAxAxAxAxA

El código del final es un ejemplo inexistente. Ahí hay que poner la firma (Signing key) del PPA, pero sólo el código que aparece detrás de la barra.

Hecho esto, ya podemos utilizar nuestro gestor de paquetes favorito. Si usamos Synaptic, habrá que recargar. Después buscamos 'libxine' y actualizamos el paquete 'libxine1-plugins' que nos actualizará sus dependencias, entre otras, 'libxine1'. Veremos que la versión de estos paquetes tiene la coletilla "+withjack1" (v. nota 1).

Después en Amarok, Preferencias, Configurar Amarok, Reproducción, Configurar, Preferencia del Dispositivo, Salida de Audio, Música, nos debería aparecer el dispositivo de salida "Jack Audio Connection Kit". Lo seleccionamos y lo subimos arriba del todo con el botón "Preferir". Lo mismo podemos hacer para el resto de salidas de audio; aunque creo que Amarok sólo tendrá en cuenta la que elijamos para música, de esta forma configuramos xine para otros tipo de salida.

Al igual que aqualung, los puertos de salida de xine no desaparecen cuando amarok está parado :)

lucid:
Dejo de mantener este documento. Aunque libxine debe tener soporte para jack integrado y no sería necesario añadir ningún repo alternativo.

Kaffeine

También utiliza xine. Si en la configuración de xine (desde Amarok, como acabamos de ver) hemos elegido Jack para la salida de video, fucionará con Jack a la primera.

Ver notas para lucid en el párrafo anterior.

flashplayer (youtube, vimeo, myspace...)

Hasta hace poco, casi la única forma de tener el flash player como cliente de jack era a través del plugin alsa-jack, que había que recompilar pues ubuntu no trae sporte para jack en su paquete "alsa-plugins". En el PPA de Motin hay una versión de los alsa-plugins con soporte para Jack que nos ahorraría tener que recompilar. Además tendríamos que crear un archivo .asoundrc con cierto código para que esto funcionase. Algunos lo hacen, parece que con mejor resultado, a través del jack audio sink de pulseaudio.


Estos métodos son parches. Ahora lo podemos tener de forma nativa por medio de un plugin aparecido hace unos meses . Manos a la obra:

Necesitamos estos paquetes:

build-essential
git-core
autoconf
automake
libtool
libasound2-dev
libjack-dev
libsamplerate0-dev
libssl-dev

Desde una terminal en el directorio por defecto (/home/usuario):

(Las dos primeras líneas son opcionales; por una cuestión de orden, conviene tener un directorio destinado a los programas en código fuente)

mkdir fuentes
cd fuentes
git clone git://repo.or.cz/libflashsupport-jack.git
cd libflashsupport-jack
sh bootstrap.sh
make
sudo make install

Los puertos de salida de flash se autoconectan a los system_playbacks

Otra opción es "pescar" el archivo del directorio /tmp, traerlo a home, chequear los permisos y abrirlo con nuestro reproductor favorito.

lucid:
Con la versión de firefox que trae, parece que hay un pequeño lío con las rutas de las librerías. Además de todo lo explicado para karmic, he necesitado hacer:

sudo ln -s /usr/local/lib/libflashsupport.so /usr/lib/firefox-3.6.3/

Si lo hacemos con firefox se nos queda colgado, con tanto hurgar en sus tripas:

killall firefox-bin

Mixxx

karmic:
Hace falta portaudio19 con capacidad para jack, cosa que no tiene el que trae ubuntu/ubuntustudio karmic. Si hemos añadido el PPA de Motin, como vimos para el caso de amarok, actualizamos el paquete libportaudio2 a la versión "+withjack2" (v. Nota 1).

En Mixxx, vamos a Options->Preferences y elegimos "Jack Audio Connection Kit" como Sound API.

lucid:
Ya no es necesario añadir ningún repo alternativo. portaudio viene con el soporte para Jack integrado.

Beneficios colaterales

Gracias a esta versión de portaudio tenemos soporte Jack para Mscore :D. (En lucid a la primera, eso sí, tenemos que elegirlo en preferencias).


Deseos inclumplidos y soluciones prácticas:

TOTEM:

karmic:
Se supone que debería funcionar con el hack a gstreamer que hace funcionar a rhytmhbox y a exaile pero no hay manera. No me importa mucho porque tengo VLC, Kaffeine o mplayer / gmplayer.

lucid:
Me funciona a la primera

FIREFOX plugins :

No he conseguido que ninguno funcione con jack dentro de firefox. ¿Alguna idea? Como alternativa, en Editar, Preferencias, Programas, he optado por abrir los archivos multimedia mediante /usr/bin/vlc. De esta forma los descarga y los abre en vlc externamente de forma automática, incluida la conexión a los system:playbacks.

AGRADECIMIENTOS

No descubro nada. Todo esto ya está escrito y lo he leído en varios sitios. Lo del flash player es a partir de un aviso de Rakarrack Team hace poco en el foro GNU/Linux de Hispasonic, con apunte oportuno de lgarrido, pues me estaba volviendo loco con las sugerencias de Raka. En general, gracias a todos los que lo han explicado y a los que lo hacen posible con su código.

Nota 1: Creo que esto no tiene nada que ver con Jack1 (versiones 0.xxx.x) o Jack2 (versiones 1.9.x). Parece un número que se ha quedado colgado atrás.

2 comentarios:

  1. Muchas gracias por el aporte. es de gran utilidad para hacer stream de todo el audio que se maneja. Excelente trabajo.

    ResponderEliminar
  2. Excelente, probé algunas opciones y continúan funcionando. Pero no me animé a tocar Firefox...¿si lo configuro para que funciones con JACK después ya no va a funcionar con Pulse? ¿es posible elegjir con cual de los 2 quiero hacerlo correr cuando sea necesario?

    ResponderEliminar