Multitarjetas con Jack (Experimento con olor a Workaround)

  • 1
Irwin J. Cespedes
#1 por Irwin J. Cespedes el 11/09/2011
Hola a todos, hoy vengo con un pequeño experimento y a la vez a una solución (a medias) de un problema que tiene QJACKCTL, la poca capacidad de hacer correr varias tarjetas al mismo tiempo con Jack. Aunque si hay una solución para tal problema. Sin embargo, a pesar de ser algo simple, requerirá de unos pequeños pasos que demostraré a continuación.

Primero, los ingredientes:
Jack (preferiblemente Jack2, por razones a explicar)
ALSA (Instalado por defecto en casi todas las distros, si no es que todas)
2 o más Interfaces o Tarjetas de Sonido que sean soportadas por ALSA (PCI, USB, FireWire, etc)
Cablería necesaria
Un vaso de café

Segundo, saber que vamos a hacer. Al iniciar Jack, usando QJACKCTL, como todo el tiempo a la hora de ir al Patchbay, ustedes verán como siempre esto:

b4940796751a01554d300ad168bc6-3035425.png

Donde "System" son las entradas y salidas de la interface que por defecto esta seleccionada. En mi caso son, mi computadora tiene una configuración de 2/2 IO (2 entradas/2 salidas), pero tengo ademas una interface USB aparte basada en el Chipset Realtek AC97 la cual gustaría de mover junto a la tarjeta 5.1 que normalmente utilizo. Así, lograría crear una tarjeta virtual con 4/4 IO, compartiendo reloj entre ambas, y por supuesto expandiendo la capacidad del equipo. Entonces haremos lo siguiente, Vamos al terminal, y hacemos esto: Insertamos el poderoso código: cat /proc/asound/cards, para ver los números asignados por ALSA para interface.

b1d2e2a94df28dd8ff15e32820faf-3035425.png

Apuntamos la salida, tomamos un sorbo de café, y es aquí donde vamos a hacer alquimia.

Presentado "alsa_in" y "alsa_out"

"alsa_in" y "alsa_out" son los pequeños programas que nos dejaran hacer este truco. Ellos hacen que JACK se de cuenta que hay más dispositivos disponibles para usar con la interface ALSA, y que puede disponer de ellos. Los mismos vienen por defecto en el paquete "jackd", por lo cual no habrá que recompilar absolutamente nada. Las razones por la que es altamente recomendable usar JACK2 en ves de JACK1, es por que JACK2 posee la capacidad de Syncing, primordial cuando se hacen estos trucos, para no oír esos molestos pops y clicks que ocurren cuando las tarjetas no están sincronizadas por algún reloj. Entonces, después de esta pequeña inmersión, abrimos QJACKCTL, ponemos a correr a Jack, y luego usamos este par de códigos:

afdd703639baa0c4053dc48dbd8e6-3035425.png

Terminal escribió:
alsa_out -d 'hw:0' -r 44100 -j 'Realtek AC97'


y

Terminal escribió:
alsa_in -d 'hw:0' -r 44100 -j 'Realtek AC97'


Donde alsa_in y alsa_out nos permitirán arrancar otra interface, aparte de la que ya esta corriendo para disponer de ella con JACK y, por supuesto, poder usarse desde una interface de control gráfica como QJACKCTL.

Los demás parámetros hacen los siguiente: -d es el hardware a usar, -r es la velocidad de muestreo con la que el hardware va a trabajar (Si se quiere no se pone, pero lo puse para que no variara mucho entre tarjeta y tarjeta, y no ocurran los condenados desfases en la grabación y la reproducción) y por último -j es para asignarle un nombre en para ubicarse en los softwares de edición en GNU/Linux, o para localizarla en QJACKCTL. El resto de parámetros están en la hoja de ayuda de alsa_in y alsa_out aquí, o en el terminal escribiendo man alsa_in.

Volviendo al asunto, luego de haber metido esos dos códigos en el terminal, nos vamos al Patchbay de QJACKCTL y vemos que ha sucedido.

c9c54fb08d4aa0a6e8ec505e37eef-3035425.png

Como ven, ya aparecen ambas tarjetas. System, la cual es la principal del sistema, y Realtek AC97, la cual es la interface externa que habilite mediante alsa_in y alsa_out. Algo importante, es que si no necesitas las salidas, y solo necesitas las entradas, o viceversa, solo tienes que usar un solo código. alsa_in para la grabación y alsa_out para la reproducción.

Finalmente, si quieren automatizar el proceso, pueden escribirse un script para poder arrancar ambas tarjetas desde QJACKCTL al hacer uso de la opción de arranque mediante él mismo

0031e1712437ebe2310b962410c3d-3035425.png

Por último, si lanzan los comandos desde el terminal, se verán cuando existe un delay entre JACK y los Pines (o interfaces) para así tener un control total de la situación. También se pueden usar las tarjetas que se quieran, tomando en cuenta el limite físico de la máquina.

Bueno, espero les haya gustado el truco. Yo lo he usado solo con las salidas, ya que lo mío es para audio en vivo, y no tanto para grabación. Aún así, el truco sirve en ambos campos.

¡Pura Vida! :-)

Gracias a Pablo_F por haberme pasado el dato de alsa_in y alsa_out hace casi un año. Había dejado esto en la pizarra de TODO, aunque hace pocos días volví a tomar cartas en el asunto
Subir
DosSantos
#2 por DosSantos el 11/09/2011
Yo por mi parte he utilizado alsa_in para grabar con 3 tarjetas de sonido... el resultado bueno, pero al grabar no habia sincronia entre las pistas de la tarjeta principal y las otras dos, pero como era una bateria, pues, se busco un golpe de caja y a mano lo cuadramos... el resultado??? dentro de un mes espero que este en la calle...


Saludos
Subir
Pablo_F
#3 por Pablo_F el 11/09/2011
Buen aporte Irwin! Sólo un par de puntualizaciones:
Alguien escribió:

...Así, lograría crear una tarjeta virtual con 4/4 IO, compartiendo reloj entre ambas...


Creo que esto no es correcto. Según tengo entendido, aunque alsa_in/out intenta sincronizar lo mejor posible (supongo que calculando desfases y haciendo correcciones sobre la marcha), cada tarjeta usa su propio reloj, lo cual no se puede cambiar por software. Por ningún software. Para usar un reloj único con dos tarjetas, habría que quitar el oscilador de una de ellas y en su lugar cablear desde el oscilador de la otra. Por ejemplo, en esta página [1] se explica cómo montar una multitarjeta con dos SB Live! y un reloj único. (Hay que tener en cuenta que cuando se escribió esto alsa_in/out no existía y lo que explica es cómo crear un dispositivo virtual por medio de uno o dos archivos de configuración de alsa).

Por otro lado, no creo que jack2 sea mejor que jack1 con respecto a la sincronización de alsa_in/out.

Además, es mucho mejor que elijas las tarjeta por nombre, no por número. Tal como lo tienes en los pantallazos, hw:0 es la CMI8738 y hw:1 la Intel (estoy leyendo el nombre entre corchetes en /proc/asound/cards) pero esto puede cambiar en diferentes arranques según sople el viento, de forma que hw:0 será la Intel y hw:1 la CMI8738 (a no ser que las hayas fijado en un archivo de configuración de alsa pero eso es un poco engorroso). Entonces, puedes usar el comando:

alsa_out -dhw:CMI8738 -jnombre_que_quieras_dar

Lo mismo, en el campo "interfaz" de qjackctl puedes usar hw:Intel en lugar de hw:1 (o el número de tarjeta que sea).

Creo que es mejor no forzar la frecuencia de muestreo y alsa_out tomará la que esté manejando jack.

Para matar el proceso usa mejor "killall alsa_out alsa_in", kill a secas necesita un número (el PID o número de identificación del proceso) y killall pide el nombre del proceso.

Por otro lado, dices que la tarjeta que normalmente usas es la Intel, que es 5.1, no? Entonces mira a ver si tiene un dispositivo "multiplayback". Mira la salida de

arecord -l && aplay -l

Puede ser que la misma tarjeta tenga varios "dispositivos", unos dúplex (aparecen en ambos listados), otros sólo captura (sólo aparecen en "arecord -l") y otros sólo reproducción (sólo aparecen en "aplay -l"). Si tienes un dispositivo multiplayback puedes elegir por separado el dispositivo de entrada y el de salida, en qjackctl. Por ejemplo, hw:Intel,0 para la entrada y hw:Intel,1 para la salida (dispositivos 0 y 1 de la tarjeta Intel). De esta forma jack podría ver los canales que faltan, ya que el dispositivo 0 (que es el que se toma por defecto cuando no se especifica en el segundo número de la nomenclatura hw:x,y) es normalmente dúplex e incluye dos canales de captura y dos de reproducción (los frontales).

Ojo, esta configuración multidispositivo y la numeración de los mismos es diferente en cada tarjeta. Por eso tienes que mirar las salidas de arecord -l y de aplay -l. Las pros y semipros suelen tener un único dispositivo dúplex.

Saludos, Pablo

[1] http://quicktoots.linuxaudio.org/toots/el-cheapo/
Subir
vagar
#4 por vagar el 11/09/2011
Buen trabajo, compañeros. :ook:
Subir
Irwin J. Cespedes
#5 por Irwin J. Cespedes el 11/09/2011
Pablo_F escribió:
(...)cada tarjeta usa su propio reloj, lo cual no se puede cambiar por software. Por ningún software. Para usar un reloj único con dos tarjetas, habría que quitar el oscilador de una de ellas y en su lugar cablear desde el oscilador de la otra.(...)


Oops, un problema de palabras. Completamente cierto, es imposible que compartan un reloj a menos que se linkeen de forma física.

De hecho, en las salidas del terminal a la hora de usar alsa_in/alsa_out, aparece algo que dice Delay=xxx ms, que parece que es el ajuste que hace el programa para centrar el reloj. Imagino que eso es.

Ahora, la salida del arecord -l && aplay -l

Terminal escribió:
**** List of CAPTURE Hardware Devices ****
card 0: CMI8738 [C-Media CMI8738], device 0: CMI8738-MC6 [C-Media PCI DAC/ADC]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: CMI8738 [C-Media CMI8738], device 2: CMI8738-MC6 [C-Media PCI IEC958]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Intel [HDA Intel], device 0: ALC660-VD Analog [ALC660-VD Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
**** List of PLAYBACK Hardware Devices ****
card 0: CMI8738 [C-Media CMI8738], device 0: CMI8738-MC6 [C-Media PCI DAC/ADC]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 0: CMI8738 [C-Media CMI8738], device 1: CMI8738-MC6 [C-Media PCI 2nd DAC]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: CMI8738 [C-Media CMI8738], device 2: CMI8738-MC6 [C-Media PCI IEC958]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Intel [HDA Intel], device 0: ALC660-VD Analog [ALC660-VD Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0


Hablando de la tarjeta que uso por defecto, es la CMI 8737, la cual es 5.1, y si tiene multiplayback. la misma tiene varios "pines" entonces ella aparece como "hw:0,1 y hw:0,2". Yo la he usado en modo multiplayback con ALSA, pero con JACK hay que hacer el mismo proceso. El punto del experimento era usar la externa y la interna juntas. Aunque, el mismo se puede aplicar como dices.

Por el resto, sera pulir la salida del experimento, que resulto ser muy agradable de hacer, y valió la taza de café
Subir
Irwin J. Cespedes
#6 por Irwin J. Cespedes el 11/09/2011
Como puntuación a los moderadores, ¿por qué nos quitaron el BBcode [code][/code]?

Off Topic Off
Subir
emerson
#7 por emerson el 05/07/2019
Yo pretendo hacer en Linux lo que hago con las ventanitas; es decir usar dos tarjetas para emitir radio online. Usando una tarjeta para el micro y otra para la Musica, con unos ajustes de plugins para la voz y otros para la música.-
En la tranquilidad del ignorante asumí que era más lógico esto que usar una tarjeta para todo, por aquello de no "sobrecargar" de trabajo a la tarjeta integrada y ayudarla con otra, USB
Por supuesto sin tener ni idea de relojes, ni ajustes de frecuenccias de muestreo y demas yerbas
No obstante, despues de instalar Cadence, Carla, un Kernel RT y ajustes varios, por una vez sonó la flauta, y durante un par de horas funcionó en una emisión experimental, de maravilla
Pero nunca mas
Como digo, ante mi supina ignorancia, reinstale distros, Mint; Ubuntu 18, Ubuntu 19, Ubuntu Studio y alguna mas que no me acuerdo, sin que volviera a sonar la flauta
Hablando con Jose GDF y algúno mas, gente fantástica que te ayuda con una paciencia digna de destacar y agradecer, me introducen al concepto de Alsa_in y Alsa_out; leo por ahí un tuto al respecto y en él se indica que hay que copiar un pequeño script al archivo, el artículo es este: http://www.jackaudio.org/faq/routing_alsa.html
En él, como digo se suigiere editar el archivo ~/.asoundrc y agregar lo siguiente:


pcm.rawjack {
type jack
playback_ports {
0 system:playback_1
1 system:playback_2
}
capture_ports {
0 system:capture_1
1 system:capture_2
}
}

pcm.jack {
type plug
slave { pcm "rawjack" }
hint {
description "JACK Audio Connection Kit"
}
}

Hasta alli, todo genial, pero a partir de ahí, se me hizo de noche,
Empece a ver un poco de luz al ver tu post, pero ahora no se si tengo que dejar lo que hice o hacer lo que tu dices , ambas cosas, o simplementeolvidarme del tema en Linux por ahora hasta que alguien se le ocurra arreglar una cosa que debería estar contemplada
En windows no debes tocar nada y funciona a la primera, pero bueno en windows tienes que pagar y aqui no

Ya se que es una molestia para ti, pero si puidieras darme una línea de trabajo, un rumbo, y si a la vez me puedes decir si vale la pena meterse en este fregado por lo que se va a obtener
Mi objetivo es mejorar la calidad de lo quew envío online, procesar la voz y la música, obviamente no con los mismos parámetros ni plugins

Sugerenccias bienvenidas!!

Recibe un cordial saludo

Emerson
Subir
vagar
#8 por vagar el 05/07/2019
emerson escribió:

Sugerenccias bienvenidas!!


No veo la necesidad de utilizar dos interfaces, en Linux es muy fácil mezclar distintas fuentes de audio usando jack. Si todo el procesamiento es interno, la carga para la CPU es menor usando una sola interfaz, ya que no tiene que invertir recursos en mantener sincronizados los relojes.

Para la automatización de la emisión a lo mejor te viene bien un software que se llama Rivendell, no sé si ya lo conocerás:

https://www.youtube.com/watch?v=YL60BJpC6Iw
Subir
emerson
#9 por emerson el 06/07/2019
Yo ya he aprendido que la pólvora la inventaron los chinos y la mejoró Nobel, asi que no me pongo a inventar nada, porque ademas, no se
Entonces
Si voy a usar una sola tarjeta, me gustaría empezar con la integrada
Preguntas Inmediatas:
Se puede ecualizar. comprimir, y reberb de la voz, SIN HACERLO ALA VEZ CON LA MÚSICA????
De ser posible
como configuro la salida de System?
como se que lo que voy a procesar es el micro y no la música y viceversa?


Recordemos que estoy hablando de una emision en vivo, el tema de la automatización lo tengo totalmente resuelto, esos son "enlatados" que ya vienen listos para escuchar, no tengo que tocar nada

Ayudas wellcomed

Y gracias anticipadas
Subir
vagar
#10 por vagar el 07/07/2019
emerson escribió:
Se puede ecualizar. comprimir, y reberb de la voz, SIN HACERLO ALA VEZ CON LA MÚSICA????


Sí, aunque necesitas software que te permita manejar rutas de audio con una mínima complejidad, por ejemplo DAWs como Ardour o QTractor.

En Ardour por ejemplo puedes definir dos buses con salida al máster, cada uno con su rack de efectos. Puedes poner tu micrófono como entrada en uno de los buses y tu software de reproducción en otro (necesitas que el reproductor sea compatible con jackd o puedes cargar las cuñas, música, etc. en una pista de Ardour). Luego, el máster lo puedes llevar al software de retransmisión.

https://we.riseup.net/refeman+radio/live-radio-streaming
Subir
emerson
#11 por emerson el 07/07/2019
Primero Gracias a Vegar por su amable respuesta

He creído entender que tengo que usar ALSA, de donde saldría la captura del micro, a traves de Ardour y jack, (ni z..rra ide a de como se hará eso)
Pero me leere el tuto del enlace , varias veces

Luego un reproductor, que puede ser cualquiera cuya salida como la del micro se puede procesar antes de enviarla al aire

O sea que el que enruta el audio es Ardour, ni cadence, ni Carla ni Jack ni historias, solo que Ardour usará Jack
A ver como consigo yo estos milagros

Pero como este sistema ya lo tengo en windows funcionando a la perfección, vere de intentarlo en Linux, pero me hace run run en la cabeza que todo estos recovecos que el sonido hace, me den mas calidad que es lo que busco, porque Mixxx solito ya hace lo del micro, la musica y enviarla al servidor de stream

Pero el saber no ocupa lugar,

Nuevamente gracias mil a los que me ayudan

Un cordial saludo
Subir
vagar
#12 por vagar el 07/07/2019
emerson escribió:
(ni z..rra ide a de como se hará eso)


ALSA es el subsistema de controladores de las interfaces de audio, con algunas funciones añadidas, pero éstas son complicadillas de utilizar para usuarios no expertos.

jackd es básicamente un sistema para transportar audio de unas aplicaciones a otras, algo parecido a ReWire en Windows.

Lo más fácil es instalar una distribución de Linux especializada en audio, como Ubuntu Studio o AV Linux, que suelen traer una configuración que proporciona la funcionalidad básica de activar jackd sobre el driver ALSA.

Si quieres usar un reproductor independiente para cuñas, música, etc. necesitarás que pueda conectarse a jackd, para poder enrutar su salida de audio a Ardour. Como dice en el tutorial, Aqualung o VLC son dos ejemplos de reproductores que tienen esta función.

Siguiendo este camino no deberías tener que hacer ninguna configuración especial de ALSA ni utilizar más que una de las interfaces de audio.
Subir
emerson
#13 por emerson el 07/07/2019
Reiterar las Gracias Vegar por sus amables respuestas

Le di un vistazo al tutorial y lo primkero que vi es que esta escrito para Ubuntu 10; lo que me hace pensar que esta "desfasado" para lo que tengo ahora

Mi intención era poder hacer lo que estoy haciendo en windows, es decir; procesar la voz que sale al aire y la música que también sale al aire, cosa que hago con tres pluguins
y un programa de DJ, (similar a Mixxx) que se llama Radio Boss, totalmente standard

Despues de leer el tutorial asumo que deberé usar un reproductor para la música, (el que sea)

Enviar el audio a Ardour, que a su vez lo enviara al programa de streaming
-en este caso liquidsoap- que tiene dos millones de dependencias que seguramente entrarán en conflicto con todo lo de KXStudio que ya tengo instalado y configurado, llámese Cadence, Carla, Catia y demas yerbas,
(que dicho sea de paso, al momento de escribir esto no tengo sonido ni para escuchar un grillo)
Teniendo en cuenta los recursos que consume Ardour y mi completo desconocimiento de su funcionamiento, (Uso Reaper en windows) el solo pensamiento de las innumerables horas que me pasaré en google me deprime

Al final pasará lo que desde hace diez años me pasa en Linux, que quiero hacer algo que en windows hago tirado de facil y las dificultades son tan grandes que lo mando todo a la M..
no sin antes haber pasado, ((como ahora) casi dos meses dando vueltas por foros, twiter, tutoriales, hata que algunos que llevan años en esto me dijeron lo que vegar, oye linux no esta hecho para dos tarjetas de sonido a la vez
Que es como decirte: mira quítate de la cabeza esto de usar un coche, lo que tienes que llevar es un carro de caballos
Todo esto no hace mas que reafirmar algo que pienso hace rato: linux es para elegidos, y tienen razón esos tios que escriben al respecto en la red creyendo que su sangre es de otro color, tienen razon,
Asi que mandare , como digo, esta idea a la papelera, dejare de viajar en un carro de caballos y volveré a mi coche de donde nunca debí salir, formateare el disco de ubuntu y me olvidare de el ...esta vez para siempre

No obstante, vaya mi profunda admiración a los que conocen los secretos de este galímatias que es linux en lo que a sonido se refiere y prometo no molestar mas

Un cordial saludo
Subir
vagar
#14 por vagar el 07/07/2019
emerson escribió:

Le di un vistazo al tutorial y lo primkero que vi es que esta escrito para Ubuntu 10; lo que me hace pensar que esta "desfasado" para lo que tengo ahora


No creo, los conceptos son los mismos.

emerson escribió:
hata que algunos que llevan años en esto me dijeron lo que vegar, oye linux no esta hecho para dos tarjetas de sonido a la vez


Yo no he dicho eso en absoluto, en Linux se pueden combinar perfectamente dos o más interfaces. Lo que he dicho es que, para el uso que tú quieres hacer, usar dos interfaces no parece la solución más idónea.

emerson escribió:
linux es para elegidos


Es como todo, paciencia y voluntad, tampoco usar VSTs en Windows es sencillo para quien no lo ha hecho nunca. Lo importante es que, si ya tienes un sistema que te funciona, no te merece la pena invertir tiempo en cambiar a un sistema distinto.

En cualquier caso, vuelvo a mencionar lo que dije en mi primera respuesta: a lo mejor Rivendell es una solución todo en uno para lo que buscas, mírate algunos vídeos en YouTube si tienes un rato.
Subir
emerson
#15 por emerson el 08/07/2019
Reitero mi agradecimiento a todos aquellos que dedican algo de su valioso tiempo a contestar

Rivendell es tosco, feo, rudimentario y difícil de usar
Esta muy bien si tienes un Pentium 4 y vives en la Puna de Atacama,Tiernes una labor social que desarrollar
en beneficio de gente que depende de ti para muchas cosas, y no tienes otras opciones

Pero en España, con 100 megas simétricas, y teniendo un programa como ProppFrexxOn Air, que es lo que usan las radios profesionales
Pa que??

Yo quería usar Linux, por una cuestión de principios por una parte, por una cuestión práctica por otra y porque me joroba bastante el intrusismo de
los muchachos de Redmon

Pero aunque soy loquito, no como cristales

El precio en esfuerzo es demasiado alto en mi caso, no vale la pena; mi tiempo no es tan barato como para tirarlo aprendienjdo una cosa
que siempre tiene un problema adicional, y que tecnologicamente va siempre por detras

La prueba es que cuando aparece algo realmente innovador, (como KXStudio) se muere de inanición en poco tiempo

yo puedo ser tonto, ignorante, y no darme cuenta de las cosas, pero cuando a la gran mayoría de la genter le pasa lo mismo, hay que hacérselo mirar

No obstante, es una experiencia, inútil, pero experiencia al fin

Un cordial saludo
Subir
Hilos similares
Respuesta rápida

Regístrate o para poder postear en este hilo