miércoles, 30 de diciembre de 2009

Plugins de efectos e instrumentos VST a través de dssi-vst

#########################
Notas de revisiones:
Revisión 0: 31 diciembre 2009. Publicado.
Revisión 1: 1 enero 2010. Completado.
Revisión 2: 3 enero 2010. Añadida nota para compilación en sistemas de 64 bits
Revision 3: 18 enero 2010. Añadido punto 9 para solucionar posibles problemas de fuentes
Revisión 4: 26 marzo 2010. Añadida alternativa a instalación a través de Synaptic, añadiendo PPA
#########################

¿Qué y por qué?

En Linux tenemos plugins de efectos de audio LADSPA y plugins sintetizadores (o "instrumentos virtuales) DSSI. Además, LV2 (LADSPA Version 2) es una nueva especificación que sirve tanto para efectos como para instrumentos. También hay plugins VST nativos para Linux.

Sin embargo, la tecnología Windows VST está tan extendida que a muchos usuarios que vienen de Windows les parece impensable tener que prescindir de sus plugins. Para eso salieron proyectos como dssi-vst, que presentamos en esta entrada.

Dssi-vst permite a los usuarios de Linux ejecutar plugins de efectos e instrumentos VST compilados para Windows en hosts para plugins DSSI y LADSPA. Además, dssi-vst ofrece un host pra VST "stand-alone" que es cliente de jack.

Dssi-vst es libre y de código abierto, escrito por Chris Cannam (autor de Rosegarden, Sonic Visualiser, la librería Rubberband...). Se distribuye bajo la licencia GPL. La compilación por defecto (que veremos en aquí) no hace uso del SDK de Steinberg y en teoría no habría problema para distribuirlo en binario. Sin embargo, no está en los repositorios de las ultimas versiones estables de Debian ni de Ubuntu.

Existen otros hosts para plugins Windows VST, por ejemplo, LMMS (en los repos de Debian / Ubuntu y otras distribuciones) o Ardourvst (no en los repositorios de Debian / Ubuntu, de momento).



Uso de dssi-vst


En la práctica, dssi-vst da para varias combinaciones. Por ejemplo, podemos:

- Tener efectos e instrumentos VST en Rosegarden, con una interfaz dssi. (Ver pantallazo 1).
- Tener efectos e intrumentos VST en ardour (nota 1), Audacity, Jack Rack o cualquier otro host de plugins LADSPA (Ver pantallazos 2 y 3).
- Tener un instrumento VST como si fuera una aplicación "stand alone", en un sencillo host cliente de jack. (Ver pantallazos 4 y 5).


Pantallazo 1. SPITFISH DeEsser (VST) lanzado desde Rosegarden, en el editor de plugins DSSI



Pantallazo 2. SPITFISH DeEsser lanzado desde ardour, en el editor de plugins LADSPA



Pantallazo 3. SPITFISH DeEsser lanzado desde Audacity, en el editor de plugins LADSPA (Menú efectos)


Pantallazo 4. SPITFISH DeEsser lanzado con vsthost


Pantallazo 5. Studio Devil, ampli virtual de guitarra (instrumento VST), lanzado con vsthost. Muestro también las conexiones de jack audio necesarias para enchufar la guitarra directamente a la tarjeta de audio y escucharnos por los altavoces


Instalación de dssi-vst

(Estas instrucciones se han probado en ubuntustudio 9.10. Para otras distribuciones o versiones de ubuntu será muy similar, pero puede haber pequeñas variaciones)


EDITADO en rev 4. Para ahorrarse los pasos 1 a 5, los usuarios de karmic pueden añadir el PPA de Philip Johnson. Más información sobre los PPA's de ubuntu.

sudo add-apt-repository ppa:philip5/extra

Ir a synaptic, recargar e instalar dssi-vst.

No recomiendo tener este repo (ni ningún otro no oficial) permanentemente habilitado. De paso veréis que tiene otros paquetes interesantes)



1) Dependencias

En ubuntu, es necesario instalar estos paquetes:

build-essential
wine-dev
liblo0-dev
dssi-dev
libasound2-dev

En sistemas de 64 bit, hay que instalar, además:

gcc-multilib
g++-multilib

(Yo he compilado para x86 (32 bits). No he probado seguir esta guía para x86_64 pero debería funcionar igualmente)


2) Conseguir las fuentes y moverlas al directorio de trabajo

Desde http://breakfastquay.com/dssi-vst/ bajamos la última versión. A la fecha de escribir esto, dssi-vst-0.8

En la carpeta 'Descargas' o en el Escritorio, nos aparecerá un tar.gz, que descomprimimos. Movemos la carpeta creada a nuestro directorio de trabajo, en mi caso, /home/pablo/fuentes.


3) Comprobar el path de las libs de dssi y ladspa y si necesario, modificar el Makefile:

Veremos que hay un archivo Makefile, con el siguiente contenido (entre otras líneas):

DSSIDIR = /usr/local/lib/dssi
LADSPADIR = /usr/local/lib/ladspa

Si hemos instalado el soporte para plugins LADSPA y DSSI a través de paquetes de nuestra distribución (o vinieron instalados por defecto, como en el caso de ubuntustudio, al instalar los plugins de audio), tendremos que modificarlas a:

DSSIDIR = /usr/lib/dssi
LADSPADIR = /usr/lib/ladspa

Podemos comprobar con nautilus cual es la ruta correcta.

4) Añadir el "include" cstdio al código fuente, para que no haya problemas de compilación

(A dssi-vst le falta este "include" para que se pueda compilar con la reciente versión del compilador de GNU que trae ubuntu 9.10. Este paso no será necesario en todos los casos)

En los archivos:

remotepluginclient.cpp
remotepluginserver.cpp
remotevstclient.cpp
rdwrops.cpp

debemos añadir, debajo del resto de "includes":

#include [cstdio]

(Sustituyendo los corchetes por los signos "menor que" y "mayor que" que no puedo escribir aquí porque el editor html no lo permite)

5) Compilar e instalar

En una terminal desde el directorio de dssi-vst-0.8:

make
sudo make install

Algunas personas se han encontado con un error al instalar dssi-vst. Algo así como:

"install: no se puede efectuar `stat' sobre «dssi-vst-server»: No existe el fichero ó directorio"

En este caso, parece que wine (algunas versiones de wine, ya que no siempre aparece este problema) crea los archivos 'dssi-vst-server.exe' y 'dssi-vst-scanner.exe' en lugar de 'dssi-vst-server' y 'dssi-vst-scanner', que es lo que espera el Makefile de dssi-vst. El truco es renombrar esos dos archivos (en el directorio de trabajo, donde están las fuentes de dssi-vst), quitándoles la extensión .exe. Y luego volver a hacer 'sudo make install'.


6) Configuración de wine

Elegir Windows XP y en la pestaña audio, alsa.
Ignorar cualquier error de tipo fixme:mixer si lanzamos winecfg desde terminal

7) Establecer las rutas de los VST

Es muy importante que los vst's (librerías de extensión .dll) estén en directorios conocidos por el sistema. dssi-vst va a mirar por defecto en los directorios:

/usr/lib/vst/
/usr/local/lib/vst
/home/usuario/vst

Si tenemos los .dll en otras ubicaciones, debemos declararlo en el archivo 'home/usuario/.bashrc', con las rutas separadas con dos puntos (:), como en la siguiente línea:

export VST_PATH=/ruta/a/vsts:/ruta/a/otros/vsts:etcétera

Por ejemplo, en mi caso:

export VST_PATH=/usr/local/lib/vst/:/home/pablo/vst/:/home/pablo/vst/pruebas

Las dos primeras rutas no sería necesario declararlas (porque son las rutas por defecto), pero mejor hacerlo.

8) Renombrar las librerías .dll para eliminar los espacios, si los hay.

9) En algunos VST las letras se ven mal hasta el punto que apenas son legibles. winetricks es un script que nos puede solucionar algunos problemillas con wine, como en este caso. Desde terminal, podemos hacer

$wget http://www.kegel.com/wine/winetricks (descarga el script)
$sh winetricks allfonts (instala fuentes de microsoft)

Casos prácticos

Para lanzar un vst como "stand alone" cliente de jack, hacemos:

vsthost elquesea.dll

Como hemos dicho, también se pueden lanzar desde Rosegarden (con interfaz dssi), ardour, audacity, jack-rack, etc (con interfaz ladspa).

Créditos y para saber más:

Chris Cannam
http://www.breakfastquay.com/dssi-vst/

http://www.digitalfishphones.com (Pantallazos 1-4)
http://www.studiodevil.com/home/ (Pantallazo 5)

Notas:

(1) Ardour también se puede compilar para hacer de host de VST, directamente sin el envoltorio ladspa-vst.

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.

domingo, 20 de diciembre de 2009

Introducción a jconvolver

##################################
Notas de revisiones:
Revisión 0: 20 diciembre 2009. Publicado.
Revisión 1: 22 diciembre 2009. Retocada descripción de frontends.
Revisión 2: 23 diciembre 2009. Ampliado tutorial de Jc_Gui
##################################

jconv (renombrado a jconvolver desde la versión 0.8.4) es un motor de convolución a tiempo real, cliente de jack. Nada mejor que la descripción que da el propio autor, Fons Andriensen, en su página web . Si descargáis las fuentes, hay una descripción más completa en archivo README. Esto pretende ser una introducción para romper el hielo.

INSTALACION
""""""""""""""""
En instalaciones basadas en Debian, podemos instalar los paquetes 'jack-jconv' y 'jconv-config-files'. Por supuesto, siempre podemos compilar e instalar manualmende desde el código fuente, que podemos descargar desde la página oficial del proyecto.

USO
"""""
Básicamente, el comando jconv llama a un archivo de configuración, el cual, a su vez, invoca el archivo wav de impulso, con varias opciones. El propio autor explica en qué consiste un archivo de configuración de jconv. Vamos a hacer una búsqueda. En una terminal:

sudo updatedb
locate jconv

Vemos que hay un README.CONFIG en /usr/share/doc/jack-jconv. Vamos a ver qué dice:

cat /usr/share/doc/jack-jconv/README.CONFIG

Vemos que hay 7 comandos diferentes, cada uno con sus opciones. Con el locate también vimos que hay varios archivos de configuración y algunos impulsos de ejemplo en el directorio /usr/share/jack-jconv/config-files/.

Voy a pasar todo esto a mi home, más que nada por tener un único directorio donde poner todos los impulsos y los archivos de configuración que me interesen. De momento, voy a crear un nuevo directorio llamado conv-reverb y luego lo copio allí con:

sudo cp -R /usr/share/jack-jconv/config-files/* /home/pablo/conv-reverb/

También voy a cambiar el propietario de todos estos archivos, para que no tenga problemas a la hora de editar los archivos de configuración:

sudo chown -R pablo:pablo /home/pablo/conv-reverb/

Y voy a descargar algunos impulsos que ha creado el propio autor desde su página oficial (en downloads, abajo, remark 2). Los descomprimo y los muevo a mi directorio conv-reverb.

Por ejemplo, voy a probar el chapel.wav. Ya teníamos un archivo de configuración de ejemplo llamado chapel.conf, así que vamos a partir de éste, que es bastante sencillo. La primera línea a modificar es el la ruta donde se encuentra el archivo chapel.wav. En mi caso, la cambio a:

/cd /home/pablo/conv-reverb

El tamaño de la partición (en la línea /convolver/new, parámetro partition) lo podemos poner igual al tamaño del periodo (cuadros por periodo) de jack. A mayor "partition" mayor latencia.
Vemos también en esa línea que lo estamos definiendo con una entrada y dos salidas. En las siguientes líneas podemos cambiar los nombres de los puertos de jack, si queremos. Por fin, en las líneas /impulse/read definimos el archivo del impulso y algunos parámetros para cada combinación entrada-salida (en este caso dos). Lo podemos dejar como está.

Si ahora hacemos en la terminal:

jconv conv-reverb/chapel.conf

Ya tendremos nuestro impulso cargado. Sus puertos nos aparecerán en las conexiones de qjackctl, y los podremos conectar con otros clientes a nuestro antojo.



En la imagen he conectado el puerto de captura 1 (donde tengo enchufado un micro) a la entrada de jconv y las salidas de jconv a los system:playbacks, que representan las salidas analógicas a los altavoces. Pues sí, me escucho como en una capilla :)


FRONTENDS
""""""""""""""

El método que hemos visto para usar jconv es muy flexible y, superado el trabajo inicial de pruebas y edición de archivos, mucho más rápido de lo que parece a primera vista. Por ejemplo, podríamos preprogramar varios reverbs y lanzarlos con un click desde un cajón en el panel de gnome.

Sin embargo, si queremos algo más sencillo y gráfico podemos contar, de momento y que yo sepa, con una par de frontends gráficos, Jc_Gui y conviction.

Jc_Gui


Jc_Gui está escrito por Hermann Meyer y James Warden, autores de guitarix, un amplificador virtual de guitarra. Jc_Gui utiliza código de guitarix, que ya tiene la opción de añadir impulsos para simular cajas de altavoces haciendo uso de jconv.

Para instalarlo, vamos a su página oficial de sourceforge y descargamos la última versión disponible. Lo descomprimimos y lo movemos a nuestro directorio de fuentes y desde su directorio hacemos:

./waf configure
./waf build
sudo ./waf install

Nos aparece en el menú de sonido y video.

Jc_Gui y conexiones en qjackctl

En la imagen de la onda podemos seleccionar parte del impulso, arrastrando el ratón con botón izquierdo, para obtener un offset y una longitud. Podemos mover la selección con botón central y borrarla con botón derecho. El tamaño por defecto, en muestras o samples, será igual al tamaño del impulso.

En cuanto a las conexiones, las salidas 2 y 3 de Jc_Gui van a las entradas de jconvolver, que devuelve la señal a las entradas 2 y 3 de Jc_Gui. Por las salidas 0 y 1 de Jc_Gui sale una mezcla que se puede controlar con el slider wet/dry. Nuestra fuente de audio la conectaremos a las entradas 0 y 1 de Jc_Gui.

A la izquierda del slider wet/dry tenemos la señal "seca", sin reverb (le afecta sólo el volumen y la ecualización). A la derecha del todo, sólo la señal "mojada" que se envía al procesador. Como la configuración de jconvolver no se puede modificar en tiempo real, los desarolladores han facilitado una ganancia y un delay "pre-jconv" en la misma ruta de la señal "mojada".


Conviction

Conviction está desarrollado en python por Juan Ramón Castán. Se puede descargar desde aquí .

Es necesario el paquete sndfile-programs y python 2.6. De momento, parece que sólo funciona con jack1 (el jack "normal", versión 0.xxx). La instalación es sencilla: 'sudo make install' desde el directorio creado al descomprimir. Aparece en el menú de sonido y video.

Si simplemente queréis cargar un impulso y que la reverb suene a la primera sin complicaros, conviction es una buena opción. Además, permite cargar varios impulsos que aparecen en las conexiones de jack como puertos independientes.

Conviction

viernes, 18 de diciembre de 2009

Instalación de linuxsampler-qsampler desde el código fuente en ubuntu / ubuntustudio 9.10

#############################
Notas de revisiones:
Revisión 0: 19 diciembre 2009. Publicado.
Revisión 1: 24 enero 2010. Revisada la instalación del soporte para LV2 (ver nota 1)

#############################

En esta entrada vamos a explicar cómo instalar linuxsampler con su frontend qsampler, desde el código fuente. Linuxsampler es un sampler de software para librerías de samples en formato .gig.

Voy a compilar los programas con las opciones por defecto, mayormente. Aquí, Luis Garrido, desarrollador de aplicaciones musicales para GNU/Linux, nos explica cómo optimizar los programas ejecutables. Precisamente pone de ejemplo linuxsampler y comenta que, con ciertas opciones, se puede conseguir una mejora radical en su rendimiento. Yo no lo he probado y de momento lo dejaré de lado. Siempre tenemos la opción de volver atrás y hacer caso y preguntar a los que controlan de verdad.

Linuxsampler tiene una licencia considerada como no-libre, ya que impone una restricción a su uso comercial (crear software o hardware comercial a partir de su código). Por esta razón, no está en los repositorios oficiales de Debian ni de Ubuntu.

Con este método, podremos editar los samples, con gigedit, desde el propio qsampler. No voy a instalar el frontend basado en java (jsampler), pero es otra posibilidad. Además, qsampler y jsampler no son incompatibles.

______________________________________________________________

INSTALACION DE LINUXSAMPLER Y QSAMPLER
""""""""""""""""""""""""""""""""""""""""
1. Descargar el código fuente

Descargaremos las fuentes desde la página oficial de linuxsampler (abajo en Source Packages). Las últimas verisones de los archivos tar.bz2:

libgig
linuxsampler
gigedit
liblscp
qsampler


2. Extraer y mover a nuestro directorio de fuentes

Extraemos con botón derecho y movemos los directorios creados a nuestro directorio de fuentes, por ejemplo, /home/usuario/fuentes

3. Compilar e instalar libgig

~/fuentes/libgig-3.3.0$ ./configure

Si "configure" nos da algún error es porque falta alguna librería. En este caso instalaremos el paquete de desarrollo de esta librería. Normalmente es fácil de adivinar, por ejemplo, si echa en falta libsndfile, lo podemos buscar en synaptic y nos encontramos 'libsndfile1-dev'. También, si es la primera vez que compilamos algo, necesitaremos el paquete 'build-essential' y seguramente alguno más. "Configure" nos pondrá sobre la pista. Ante la duda, no instalaremos paquetes a lo loco. Mejor volver a ejecutar "configure" hasta que deje de quejarse. Entonces, compilamos con:

make

e instalamos con:

sudo make install

4. Compilar e instalar linuxsampler:


./configure no da error pero advierte que no encuentra sqlite, necesario para cargar bases de datos de instrumentos. Instalo libsqlite3-dev.
Vuelvo a hacer ./configure.

El mensaje final me dice:

# MIDI Input Drivers:
# ALSA: yes, JACK: yes, CoreMIDI: no, MME: no, MidiShare: no
#-------------------------------------------------------------------
# Audio Output Drivers:
# ALSA: yes, JACK: yes, ARTS: no, CoreAudio: no, ASIO: no
#-------------------------------------------------------------------
# Building sampler as plugin for following host standards:
# DSSI: yes, LV2: no, VST: no, AU: no
#-------------------------------------------------------------------#

Esto significa que tengo soporte MIDI y audio para alsa y para Jack, pero no puedo lanzar linuxsampler como un plugin LV2 ni como un plugin VST. Lo segundo no me interesa, ya que si bien podría hacerlo funcionar con vsthost de dssi-vst (por ejemplo), me parece absurdo ya que ese host de VST lo tengo precisamente para los que no tengo opción nativa para linux. ¿Pero, sería interesante tener linuxsampler como plugin LV2? ¡No parece mala idea!

Inciso: Soporte para LV2


Hace falta lv2core, que podemos instalar siguiendo las instrucciones que se dan aquí. Volvemos al directorio de linuxsampler y otra vez:

./configure
...
# Building sampler as plugin for following host standards:
# DSSI: yes, LV2: yes, VST: no, AU: no

Ahora sí, ya podremos tener linuxsampler en un host de LV2 (y también en un host de dssi, como Rosegarden, esto es porque en ubuntustudio-audio-plugins viene instalado el soporte para dssi y ya teníamos las librerías instaladas).


5. Gigedit:

./configure

me ha dado el siguiente error:
configure: error: Your intltool is too old. You need intltool 0.35.0 or later.

Voy a synaptic y busco intltool. Lo instalo. En el segundo intento de configure me dice:

No package 'gtkmm-2.4' found
No package 'gthread-2.0' found

Los busco en synaptic e instalo libgtkmm.-2.4-dev y sus dependencias.

Sin embargo, configure me advierte que no encuentra linuxsampler (?). No sé por qué ocurre esto pero pruebo a volver al directorio de linuxsampler y hacer otra vez ./configure, make y sudo make install.

Otra vez al directorio gigedit. "configure", ahora sí, me dice:
checking for LINUXSAMPLER... yes
Found linuxsampler 0.5.0

make y sudo make install, terminan con éxito (no hay mensajes de error).

5. liblscp


./configure
make
sudo make install

Como la seda

6. qsampler
./configure

checking for Qt library version >= 4.1... no; Qt 4.1 or greater is required

¿Qué hace falta aquí? Como ya deberíamos haber leido en el README, necesitamos qt 4.
Vamos a ir a synaptic y hacer una búsqueda por qt. Instalaremos libqt4-dev

"configure" termina bien. Sólo veo una cosa rara:
libgig supports fast information retrieval . . . .: no
No creo que sea importante. Seguimos con make y sudo make install... EXITO.

"""""""""""""""""""""""""""""""""""""""""

Vale, se supone que ya hemos terminado. Vamos a lanzar qjackctl y después qsampler. qsampler aparece en el menú de sonido y video... Parece que no va. Si lo lanzamos desde terminal:

~$ qsampler
qsampler: error while loading shared libraries: liblscp.so.6: cannot open shared object file: No such file or directory

Problemilla. Vamos a localizar liblscp:

$ sudo updatedb
$ locate liblscp

Entre otros:
/usr/local/lib/liblscp.so.6

En realidad existe pero no la encuentra. Esto es porque qsampler espera esa librería en /usr/lib, no en /usr/local/lib. Podemos solucionarlo con un enlace simbólico:

sudo ln -s /usr/local/lib/liblscp.so.6 /usr/lib/liblscp.so.6

Solucionado.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

qsampler, con qjackctl

Nota 1: Si seguiste el método de instalación de LV2 que dí en la revisión 0, borra las librerías de slv2 en /usr/local/lib después de haber seguido el método referenciado en la revisión 1 (sudo rm /usr/local/lib/libslv2* será suficiente)

miércoles, 16 de diciembre de 2009

Ubuntustudio 9.10 para principiantes. IV. Ajustes y primeros pasos

################################
Notas de revisiones:
Revisión 0: 16 diciembre 2009. Publicado
Revisión 1: 20 marzo 2010. Actualizado

###############################

EN PROGRESO.

Esta entrada va a ser la última de la serie de ubuntustudio para principiantes. ¡Pero no porque ya no sea necesario ir más lejos!

En otras entradas seguiremos hablando sobre ajustes e instalación y manejo de programas que, por supuesto, serán aplicables a ubuntustudio. Sin embargo, fuera de esta serie procuraré que el enfoque sea distro-neutral en la medida de lo posible y en la de mis escasos conocimientos de distribuciones no basadas en debian.


1. Tarjetas de audio

El control de las tarjetas de audio está explicado en esta entrada.


2. Ajustes para jack

Si quieres usar tu ordenador para crear música, no puedes prescindir del servidor de audio jack. Aquí hicimos una breve presentación de jack y una demostración de la flexibilidad entre las conexiones de audio entre aplicaciones y tarjeta de sonido.
Pr favor, lee ahora la breve presentación del servidor de audio jack y los "conceptos no tan obvios" 1) 2) y 3). Suelen ser motivo de confusión frecuente entre nuevos usuarios.

Jack ya viene instalado en ubuntustudio pero hay que hacer algunos ajustes para que el servidor y sus clientes se encuentren cómodos.

Vamos a abrir una terminal y a comprobar la salida de los siguientes comandos:

groups

ulimit -r

ulimit -l

El primero a qué grupos pertenecemos como usuario. Nuestro usuario debe estar en el grupo audio (grupo al que vamos a dar ciertos privilegios).

El segundo dice cuál es la máxima cantidad de memoria que puede bloquear nuestro usuario. Jack y sus clientes quieren tener la posibilidad de bloquear memoria. A mí me sale 64, que es insuficiente para jack. jack.org recomienda el valor "unlimited".

El tercero te dice cual es la máxima prioridad de realtime que puede tomar jack. Lo máximo y lo que se suele recomendar es que sea 99, y es lo que trae ubuntustudio por defecto en una instalación limpia.

Así que tenemos que conseguir que 'ulimit -l', nos devuelva el valor "unlimited"

(Nota para usuarios que han "actualizado" a ubuntustudio desde ubuntu: Hacer también el paso 0, si no aparece "audio" en la salida de 'groups')

0. Añadirte al grupo audio con el comando:
sudo adduser tunombredeusuario audio

1. Editar el archivo /etc/security/limits.conf (por ejemplo con:)
gksudo gedit /etc/security/limits.conf

2. Añadir al final de este archivo las líneas (la primera ya estará si 'ulimit -r' dió 99):
# Prioridad de realtime y memlock, necesario para jack en realtime (esto es un comentario)
@audio - rtprio 99
@audio - memlock unlimited

3. Reiniciar.

Ahora abrimos otra vez la terminal y comprobamos con los comandos de arriba (podemos usar flecha arriba para repetir comandos introducidos últimamente) que estamos en el grupo audio y sobre todo que 'ulimit -l' da "unlimited" y 'ulimit -r' da 99.

De esta forma podremos lanzar jack con la opción realtime, que es lo recomendado.

3. Configuración de jack

TODO. Esto necesita una entrada dedicada. De momento, google es nuestro amigo.

4. Lo que no puede faltar

TODO: Soporte de idiomas, códecs... Dar un par de buenos links, Hay muchos sitios donde explican esto y mucho más.

5. Trucos y conveniencias

Comandos básicos de terminal e instalación de utilidades para facilitarnos el manejo del ordenador de una forma lo más gráfica posible.

6. Instalación de programas

¿Cómo se instalan programas?


7. Aplicaciones interesantes

Plugins (LADSPA, DSSI, LV2, Windows VST, Linux VST)
Reverb convolución (jconv, Jc_Gui, conviction...)
Para guitarristas (Rakarrack, guitarix, tuneit...)
Edición (Audacity, rezound, ...)
Grabación multipistas (Ardour, qtractor, traverso, non-daw...)
Secuenciadores MIDI (Rosegarden, Muse, Seq24, non-sequencer...)
Notación musical (mscore, notedit, denemo, Rosegarden, Lilypond)
Análisis de audio (jaaa, japa, sonic visualiser y plugins vamp...)
Programación de procesado de audio (Puredata, Supercollider, Csound...)
Educación (tuxguitar, solfege...)
....

domingo, 13 de diciembre de 2009

Organización y control de tarjetas de audio

#########################
Notas de revisiones:
Revisión 0: 13 diciembre 2009. Publicado.
Revisión 1: 8 febrero 2010. Corregido. No 'alsabase' sino 'alsa-base' y otros detalles.
Revisión 2: 8 junio 2010. Mejor usar en jack la identificación alfanumérica que da alsa

#########################

Advertencia: Esta entrada asume que las tarjetas de audio están soportadas por ALSA. Para comprobar el soporte en Linux de tu tarjeta de audio, ver (TODO).


Aunque existen herramientas gráficas para configurar el audio, nada es tan fiable, potente e informativo como nuestra vieja amiga la terminal de comandos.

¿Qué tenemos por ahí?


Hagamos en la terminal:

lspci | grep -i audio

Nos saldrán los dispositios de audio que tenemos en el bus pci.

En mi caso:

pablo@Desktop:~$ lspci | grep -i audio
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 02)
05:00.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 08)
05:01.0 Multimedia audio controller: VIA Technologies Inc. ICE1712 [Envy24] PCI Multi-Channel I/O Controller (rev 02)

La primera es la integrada, la segunda una SB Live! y la tercera una m-audio 2496.

Además, he enchufado una UCA202 de Behringer en un puerto USB. Si hago:

lsusb

Veo, entre otras líneas:

Bus 002 Device 003: ID 08bb:2902 Texas Instruments Japan

ALSA es un projecto mantenido por voluntarios que escriben drivers para tarjetas de audio y los integran en el kernel de Linux. Estas cuatro tarjetas están soportadas por ALSA. Vamos a ver cómo las ve ALSA, con el comando:

cat /proc/asound/cards

En mi caso:
pablo@Desktop:~$ cat /proc/asound/cards
0 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0xfebf8000 irq 22
1 [Live ]: EMU10K1 - SB Live! Value [CT4870]
SB Live! Value [CT4870] (rev.8, serial:0x80281102) at 0xb880, irq 21
2 [M2496 ]: ICE1712 - M Audio Audiophile 24/96
M Audio Audiophile 24/96 at 0xb800, irq 22
3 [default ]: USB-Audio - USB Audio CODEC
Burr-Brown from TI USB Audio CODEC at usb-0000:00:1d.1-1, full s

Y qué modulos o drivers las manejan, con

cat /proc/asound/modules

Para mí:

pablo@Desktop:~$ cat /proc/asound/modules
0 snd_hda_intel
1 snd_emu10k1
2 snd_ice1712
3 snd_usb_audio

El módulo de la tarjeta integrada es snd_hda_intel, el de la SB Live!, snd_emu10k1, el de la m-audio 2496, snd_ice1712 y el de la UCA 202, snd_usb_audio.

Acerca de la tarjeta integrada, si no la vamos a usar, lo mejor es deshabilitarla desde la BIOS. Si nos fijamos, está compartiendo número de IRQ con la m-audio (irq 22). Eso no es bueno. Queremos que nuestra tarjeta principal no comparta número de IRQ con ningún otro dispositivo. Echaremos un vistazo a la salida de

cat /proc/interrupts

Si tenemos un kernel RT, podemos levantar la prioridad de nuestra tarjeta de audio para mejorar la latencia. Esto se explica en esta entrada

Un poco de orden

Pronto volveré a guardar en el cajón la SB Live! y entraré en la BIOS para deshabilitar la integrada, pero de momento tengo un pequeño problema; cuando reinicio el ordenador el orden de las tarjetas en 'cat /proc/asound/cards' ya no es el mismo.

Esto puede crear un problema con jack si en el setup de qjackctl elegimos la interfaz con su identificación numérica (hw:0 por ejemplo).

Para solucionar esto, podemos hacer dos cosas. Una de ellas, es darles números de orden fijos como se explica a continuación pero existe otra forma mucho más sencilla e infalible que he aprendido recientemente. Si queréis ahorrar tiempo, saltar hasta % y seguir leyendo...

Editamos el archivo '/etc/modprobe.d/alsa-base.conf' (nos debemos asegurar que este archivo existe, es posible que su nombre sea 'alsa-base' en lugar de 'alsa-base.conf'):

gksudo gedit /etc/modprobe.d/alsa-base.conf

Y añadimos al final:

#Dar números de orden fijos a la tarjetas de audio
alias snd-card-0 snd-ice1712
options snd-ice1712 index=0
alias snd-card-1 snd-emu10k1
options snd-emu10k1 index=1
alias snd-card-2 snd-hda-intel
options snd-hda-intel index=2
alias snd-card-3 snd-usb-audio
options snd-usb-audio index=3

Fijaros que he tomado los nombres de los módulos, pero hay que sustituir el guión bajo por un guión normal.

Para que este cambio tenga efecto debemos, bien reiniciar el ordenador, o bien, más rápido, recargar los módulos de alsa con el comando:

sudo alsa force-reload

%

Poner en jack la identificación alfanumérica, que es lo que encontramos entre corchetes en la salida de "cat /proc/asound/cards", precedido de "hw:". Por ejemplo, si quiero que jack arranque con la m-audio escribiré en el campo interfaz (aunque no aparezca en el menú desplegable):

hw:M2496

Mezcladores de alsa

ALSA nos da acceso al mezclador hardware, con el cual podemos interactuar con los niveles, las rutas del audio y otros parámetros fundamentales de nuestras tarjetas.

El más elemental es 'alsamixer', de línea de comandos. El manejo es con el teclado:

[TAB] para cambiar Playback, Capture, All. Para reproducción, lo dejamos en Playback.
Flechas izquierda/derecha para movernos por los parámetros (Items)
Flechas arriba/abajo para cambiar valor.
Tecla [M] para silenciar/activar. (MM indica silenciado, OO activado)
[Ctrl] + [C] para salir.

Hay otros mezcladores gráficos como gnome-alsamixer o gamix (en ubuntu / ubuntustudio, en synaptic). gamix está muy bien porque los controles están ordenados. Para las integradas o para las comerciales tipo SB es mucho más claro que alsamixer o gnome-alsamixer.

gamix sobre la tarjeta integrada en un Acer Aspire One

El controlador recomendado para la m-audio 2496 y similares (m-audio 1010LT por ejemplo; en general, las que usen el módulo snd_ice1712) es 'envy24control'. Se lanza desde terminal. Es necesario que tengamos instalado el paquete 'alsa-tools-gui'.

Envy24control sobre una m-audio 2496. Pestaña Analog Volume

Para algunas tarjetas RME, el controlador adecuado es hdspmixer (también en el paquete alsa-tools-gui).


Problemas comunes


1. No suena o no captura audio
Si no suena, lo primero será comprobar que los cables están conectados correctamente. Después comprobaremos los niveles de nuestro mezclador ALSA favorito (alsamixer. gamix, gnome-alsamixer...)

2. Mi tarjeta de audio integrada sigue sin sonar o sin capturar audio
En ocasiones, y sobretodo en laptops, las tarjetas de audio integradas que utilizan el módulo snd_hda_intel tienen algunos problemillas. Aquí hay una orientación para intentar arreglarlos:
http://www.ubuntu-es.org/?q=node/115147

3. Mi tarjeta m-audio no suena ni captura.
Si es una tarjeta que usa el módulo snd_ice1712, lo primero será comprobar la pestaña Analog Volume de Envy24control. Los convertidores DAC (para reproducción) y ADC (para captura) no deben de estar bajados.

3. Mi tarjeta de audio funciona pero Jack no arranca.
Ver (TODO)


Créditos y para saber más


User FAQ nº 13 de www.64tudio.com
Los créditos en http://www.ubuntu-es.org/?q=node/115147
ALSA wiki sobre los mezcladores de ALSA, http://alsa.opensrc.org/index.php/AlsaMixers