jueves, 10 de agosto de 2017

Cómo usar más de una tarjeta de sonido a la vez con Jack

ADVERTENCIA: Esto es altamente inestable. No se recomienda para entornos de producción, no al menos sin haber realizado varias pruebas antes.

Es posible hacer funcionar el servidor de audio Jack con dos o más tarjetas o interfaces de audio. Ya sean externas o internas del equipo, aunque insisto en que ni es recomendable ni es estable.

Si necesitas hacer sonar una misma fuente sonora por dos tarjetas de sonido diferentes a la vez, o necesitas grabar de dos tarjetas de sonido para aprovechar todas sus entradas, este pequeño tip es para ti.

En el ejemplo voy a hacer sonar Audacity por la salida de auriculares de la tarjeta interna de mi portátil y, al mismo tiempo, que suene por la salida de mi interfaz USB M-Audio Fast Track

En primer lugar vamos a averiguar con qué nombres conoce el sistema mi hardware de audio conectado y operativo. Abrimos una Terminal y le decimos esto:

cat /proc/asound/cards

En mi caso me da este resultado:

0 [HDMI ]: HDA-Intel - HDA Intel HDMI HDA Intel HDMI at 0xc1210000 irq 52
1 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xc1214000 irq 50
2 [Track ]: USB-Audio - Fast Track M-Audio Fast Track at usb-0000:00:14.0-3, full speed

PCH corresponde a la tarjeta de sonido interna y Track a mi Fast Track. No perdamos de la memoria estos datos.

Teniendo ya el servidor de audio Jack funcionando, vamos a crear una salida virtual para la tarjeta interna del portátil, mientras Jack está gestionando directamente la Fast Track. Para ello, aprovechando que tenemos la terminal abierta (no la habrás cerrado, ¿verdad?) y damos esta orden:

alsa_out -dhw:PCH

También podría valer:

alsa_out -dhw:1

Porque en esta sesión, hw:1 es la PCH, la tarjeta interna del portátil, pero como vimos en una entrada anterior, es mejor usar los nombres que los números de dispositivo.

Si abrimos Catia, Patchage o cualquier otro programa que permita gestionar conexiones, comprobaremos que se nos ha creado un nuevo nodo, llamado alsa_out. Si ponemos a reproducir Audacity y nos vamos a nuestro patchbay preferido, ya podremos conectar la salida de Audacity (la de PortAudio, ver imagen de cabecera) a la segunda tarjeta de sonido. Y quien dice dos, dice tres o más... Pero ya sabéis lo fácil es que pete esto...

En este ejemplo tengo un vídeo de Youtube reproduciendo, y sonando a través del puente Pulseaudio-Jack, y haciéndolo sonar a través de tres tarjetas a la vez: la Fast Track, la interna del portátil, y una StealthPlug que tengo por aquí.

Para personalizar el nombre, se añade el argumento -j nombre. Viene bien para identificar mejor las entradas y salidas generadas. Para el ejemplo he ejecutado:

alsa_out -dhw:PCH -j Interna_Port

Para acceder a las entradas se usa alsa_in. Por ejemplo, para usar la entrada de línea de la StealthPlug y aprovecharla para grabar en Ardour, por ejemplo:

alsa_in -dhw:StealthPlug -j StealthPlug

Por último, sugiero automatizar estos comandos en scripts para no tener abiertas las terminales mientras se ejecutan, o ejecutarlos usando los medios que tiene la línea de comandos para poner en segundo plano. Si no, se corre el riesgo de cortar la conexión por el simple hecho de cerrar el emulador de terminal.

Todo esto lo aprendí en una entrada de Semicorchux. Valía la pena rescatar esa información del olvido. Para más detalles, os invito a visitar la entrada de Pablo.

Puedes visitar la entrada original en www.JoseGDF.net, leer los comentarios e incluso dejar el tuyo, si lo deseas.

4 comentarios:

  1. Me ha encantado
    No se si se puede aplicar a una tarjeta para el micro y otra para la musica
    pero lo intentaré. Lo que sigo sin entender es como diferencias la señal de cada cosa para procesar uno independiente del otr; es decir, el proceso que aplico a la voz no puede ser el mismo que aplico a la música. Pero son ideas

    ResponderEliminar
    Respuestas
    1. La manera de saber qué señal corresponde a cada cosa... La más directa es el clásico prueba-error. Ir haciendo conexiones en Catia y escuchando a ver qué suena por ahí. La manera más fácil es conectar a las salidas "playback", desconectando previamente todo lo que haya conectado, para evitar confusiones. Ahí ya sabes qué nodo corresponde a cada cosa.

      Disculpas por el retraso en responder comentarios. Tenía la cuenta de Blogger parada desde hacía mucho tiempo.

      Eliminar
  2. Lo de los scripts me ha tumbado, no es que no sepa lo que son, pero no tengo ni idea de como se hacen o de su sintáxis

    ResponderEliminar
    Respuestas
    1. Yo tampoco sé. Pero algo que aprendí desde hace ya tiempo, que uso GNU/Linux, es que casi cada comando, por no decir todos, en terminal, puedes saber sus opciones y cómo ejecutar bien las órdenes, simplemente tecleando la orden más "-h" o "--help" (si no funciona de una manera, lo hará de la otra) a continuación y enter. Ahí suelen salir todas las opciones del programa, y su sintaxis. Así es como aprendo a hacer las cosas en terminal normalmente.

      Eliminar

IMPORTANTE: los comentarios en este blog están cerrados por tiempo indefinido.

No hay normas especiales para publicar comentarios en este blog. Sólo las básicas: respeta, no insultes, y no hagas SPAM descaradamente. Tampoco se admitirán comentarios que vulneren la Ley. Cualquier aportación, consulta y crítica es bienvenida, a condición de cumplir estas normas básicas.

Si lo que quieres es ponerte en contacto directamente conmigo, dispones para ello de un formulario de contacto.

Nota: solo los miembros de este blog pueden publicar comentarios.