#########################
Notas de revisiones:
Rev 0: 19 diciembre 2010. Publicado.
Rev 1: 25 mayo 2011. Edición de mantenimiento.
#########################
Segunda parte. Dispositivos de entrada y de salida. Jack sobre varias tarjetas de audio
Si estás perdido en la tarea de configurar el servidor de audio jack, no empieces por aquí. Lee antes la primera y más importante parte.
Lo normal es que jack trabaje sobre una única tarjeta (el "interfaz") en la cual tendremos entradas y salidas suficientes para capturar y reproducir sonido. Sin embargo, se puede configurar jack para que utilice diferentes dispositivos de entrada y de salida.
También presentamos las utilidades alsa_in y alsa_out.
En las faq de jackaudio hay escrito algo sobre esto, yo intentaré elaborarlo un poquito más aun a riesgo de meter la pata.
Tarjetas y dispositivos
Alsa maneja los conceptos de "Tarjeta" (Card), "Dispositivo" (Device) y "Subdispositivo" (Subdevice). Cada tarjeta puede tener varios "dispositivos" y éstos a su vez, varios "subdispositivos". Jack necesita saber qué tarjeta y qué dispositivo usar así que dejamos de lado el "subdispositivo" (menos mal).
En general, una tarjeta soportada por alsa, se denomina numéricamente "hw:x,y", donde "x" es el número de tarjeta e "y" es el número de dispositivo, comenzando ambos desde cero. Muchas tarjetas tienen un dispositivo único y no hace falta especificarlo. Así, hw:0 es lo mismo que hw:0,0. Sin embargo hay otras tarjetas que tienen varios dispositivos, típicamente, las tarjetas "de consumo". Veamos esta imagen:
"arecord -l" muestra las tarjetas y dispositivos que sirven para captura y "aplay -l" los que se pueden usar para reproducción (he filtrado las líneas que contienen la palabra "subdispositivo"). En cada tarjeta puede haber dispositivos únicamente de captura, únicamente de reproducción, o dúplex. Los dispositivos dúplex (capaces de captura y reproducción simultánea) aparecen en la salida de ambos comandos.
Veis que la tarjeta 0, en este caso la M Audio Audiophile 24/96 (hw:M2496) nos lo pone fácil; sólo tiene un dispositivo y es válido tanto para captura como para reproducción.
La tarjeta 1 es la integrada, hw:Intel. Tiene dos dispositivos, uno para los puertos analógicos y otro para el puerto digital. Ambos son utilizables tanto para captura como para reproducción.
La tarjeta 2 es una tarjeta virtual. Paso palabra.
Con la tarjeta 3, la mítica SB Live!, la cosa se lía un poco. Si elegimos la interfaz "hw:Live" la cosa va bien pero nos encontramos con que sólo tenemos dos puertos de captura y dos puertos de reproducción. hw:Live es equivalente a hw:Live,0 y por tanto se usa el dispositivo que corresponde a "ADC Capture/Standard PCM Playback", que, por lo que se ve, enseña solamente estos 2 + 2 puertos.
¿Qué pasa con el resto de salidas del sistema surround? Pues que están en otro "dispositivo".
Para acceder a estos puertos podemos usar "hw:Live,0" para captura (es decir, "dispositivo de entrada" y "hw:Live,3" para reproducción (dispositivo de salida). Eso sí, tendremos que ir descubriendo qué "puerto escribible" de jack corresponde a qué salida física y, por supuesto, el mezclador interno y los niveles de los canales deberán de estar configurados correctamente en alsamixer.
En el pantallazo se puede observar cómo el menú desplegable en los dispositivos de entrada y salida se corresponden con las salidas de arecord -l y aplay -l respectivamente.
Por supuesto, también podemos intentar usar dispositivos de entrada y salida de tarjetas diferentes, pero no es muy recomendable. Para eso es mejor usar alsa_in y alsa_out.
alsa_in y alsa_out
Ejemplo de uso:
Jack está ejecutándose sobre el interfaz hw:M2496 pero nos vendría bien un canal estéreo de la SB Live! para monitorización. Podríamos usar:
alsa_out -jSBlive -dhw:Live,0
La opción -j es opcional. Ver: man alsa_out
Otras opciones
En el archivo ~/.asoundrc podemos crear dispositivos virtuales aunque esto es algo que supera mis conocimientos y mi experiencia. Ver el clásico "el cheapo howto" http://quicktoots.linuxaudio.org/toots/el-cheapo/ y la documentación de alsa para algunos ejemplos.
RADIO ESCOLA UN SOMNI FET REALITAT
Hace 6 años
Tengo una pregunta para ti, Pablo. Intento el comando de alsa_out y me sale que no existe el comando. El típico command not found. ¿Hay que instalar algún paquete adicional?
ResponderEliminarLa verdad es que esto tiene buena pinta y, además, me puede hacer falta pronto. Casualmente tengo una SBLive!, pero USB, y me vendría bien para monitorizar tocando en directo, porque mi M-Audio sólo tiene una salida estéreo.
Un saludo.
Hola José. A mí me funciona sin más. En lucid son ejecutables instalados por el paquete jackd. ¿Qué distro Linux y versión y qué versión de jack tienes instalada (jackd -V)?
ResponderEliminarSaludos amigo Pablo, siempre en la brecha y dando caña. Enhorabuena por el post.
ResponderEliminarY felices fiestas.
Hola Pablo
ResponderEliminarrespecto a lo de "otras opciones" hay en el wiki de Musix una entrada interesante en castellano.
http://www.musix.org.ar/wiki/index.php/2-tarjetas-es
Estoy en Karmic todavía, en ambos ordenadoress (al final tuve que actualizar el portátil, que lo tenía todavía en Jaunty, pero se terminó el soporte técnico y actualicé a Karmic).
ResponderEliminarLa versión de jackd que tengo es esta:
jackd version 0.116.1 tmpdir /dev/shm protocol 24
Otra de esas cosas por las que hay que actualizarse, porque se pierde uno cosas como esta.
Gracias Pablo. Un saludo y felices fiestas por si no vuelvo antes.
Hola Igny, gracias por tus ánimos! Felices fiestas a tí también!
ResponderEliminarHola Anónimo, gracias por el aporte!
Hola José, es verdad. Estas utilidades son bastante nuevas. En el jackd que viene con lucid ya están. Lo puedes solucionar compilando jackd. Probablemente también sirva "tomar prestado" el jackd de lucid cambiando temporalmente el /etc/apt/sources.list. Con prudencia pero sin miedo.
Saludos, Pablo
eres genial pablp, thanks...
ResponderEliminarSaludos Pablo. Quería comentar una cosa y es que tengo una interfaz de audio e-mu 0202 usb la cual nos dio algunos problemas en 8.04 que tu me resolvistes. En esta ocasion y desde 10.10 no hay ningun problema o eso parece, aun estoy empezando y solo estoy leyendo pero jackd inicia bien con ella y lo que te quería comentar es que parece ser que obtengo mejores resultados de latencia configurando jack a 88200 Hz y 128 de buffer, esto me da una latencia de 2,9 ms. sin xruns mientras que si lo configuro a 44100 y 64 de buffer también me da unos 2,9 ms. de latencia pero me empieza a hacer xruns. A eso me refiero. Todo esto es a pelo, solo con jack pues aun no he instalado ardour pero si me he autoincluido en el grupo de usuarios de "audio" en el cual no estaba incluido y aplicado ulimit -r y ulimt -l
ResponderEliminarobteniendo 99 y unlimited.
La cosa pinta bien...
Gracias, esto seria muy complicado sin personas como tu.
Saludos
Hola Miquel, perdona la tardanza.
ResponderEliminarPues sí, pinta muy bien. 88200 Hz es un poco exagerado, creo yo. Los archivos en wav serán el doble de grandes y no van a sonar mejor que a 44100 Hz. Yo pienso que 44100 Hz y 128 cuadros por periodo es una muy buena configuración. Incluso 256 cuadros. Es más, dependiendo de cómo hagas la monitorización es conveniente trabajar con latencias más altas para no sobrecargar el sistema. Lo importante es que no tengas xruns mientras grabas (sobretodo) o reproduces.
gracias por la info es bueno saber de gente como tu interesado en ayudar a los demas .... bueno pues te cuento gracias a tu info logre iniciar jack pero una cosa es iniciar jack y otra hacerlo funcionar como deseas... esta es mi configuracion jack http://i54.tinypic.com/r7vin7.jpg lo que deseo es iniciar jack para poder grabar el audio interno (el que se reproduce cuando ves algun vidio en youtube o reproduces musica en amarok) con RecorditNow pero existe un apartado en el setup de recorditnow que no logro entender... cuales son los o el jack ports,, y los demas parametros??? ni dea,,, espero y me puedas ayudar de antemano muchas gracias por la info de arriba saludos
ResponderEliminarHola.
ResponderEliminarExplico cosas básicas primero:
Con respecto a su integración con jack podemos hacer una clasificación (muy a lo bruto) de tres tipos de programas:
1) Los que no funcionan con jack de ninguna manera, al menos por ahora.
2) Los que no funcionan por jack por defecto pero se pueden convertir en clientes de jack.
3) Los que funcionan con jack por defecto.
Con "funcionar con jack" quiero decir que son clientes del servidor de audio jack, dicho de otra forma, presentan puertos de "jack audio" de grabación, reproducción o ambos a la vez (dependiendo del tipo de programa). Estos puertos los puedes ver (o no) en la ventana de conexiones de Jack Control, pestaña audio, y los puedes conectar a tu antojo. En este caso, desde los puertos de salida del cliente reproductor a los puertos de entrada del cliente grabador.
Si no ves puertos de captura del cliente "recorditnow", significa ni más ni menos que recorditnow no es un cliente de jack audio.
Dicho de otra forma, lanzar el servidor jack sólo tiene sentido cuando los programas que vas a usar son clientes de jack. Tienes dos opciones:
1) No usar jack. Aquí no te puedo ayudar, y menos con KDE, pero supongo que se podrá.
2) Usar un grabador cliente de jack y un reproductor cliente de jack.
Con respecto a los reproductores, la mayoría pertenecen al grupo 2 que hemos visto antes, o sea, la mayoría se pueden "jackificar". Ver http://semicorchux.blogspot.com/2009/12/reproductores-de-multimedia-traves-de.html
Con respecto a los grabadores, me temo que recorditnow pertenezca al grupo 1. Pero tienes grabadores sencillos completamente "jack-aware". Ver http://semicorchux.blogspot.com/2010/04/grabadores-sencillos-jack-timemachine-y_24.html
Aclaro que no conozco recorditnow. Es posible que se pueda configurar para que sea cliente de jack audio. Tienes que llegar a ver sus puertos en la ventana de conexiones de Jack Control.
ResponderEliminarHola buenas me presento Soy Andrea y no se como empezar .....
ResponderEliminarY com buen novato me da problemas Jack que no se conecta como debe con mi tajeta M44
La verdad no entiendo pq una vez es hw:0 y otrra es hw:1.
Pero es que incluso configurndo cada vez las salida corecta no salen las conexiones para poder grabar o trabajar con los programas que necesitan Jack.
Me puedes auydar?? donde busco informacion coerente y facil sobre este tema parece q lo q me pasa mi no le pasa a nadie. Sera la tarjeta q tengo q estar rota ???
como lo puedo saber?
Tb lo absurdo es q de repente funciona perfectamente y otra me abre dos ventanas emergentes de mensaje y me da estos errores
D-BUS: El servidor JACK no puede iniciarse.
No puede conectarse al servidor JACK como cliente.
- La operación global falló.
- No puede conectarse al servidor.
Por favor revise la ventana de mensajes para mas información.
y en la verntana de mensaje aparece esto
17:03:38.586 D-BUS: El servidor JACK no puede iniciarse. Disculpa
Cannot connect to server socket err = No existe el archivo o el directorio
Cannot connect to server socket
jack server is not running or cannot be started
Mon Apr 30 17:03:38 2012: Starting jack server...
Mon Apr 30 17:03:38 2012: JACK server starting in realtime mode with priority 10
Mon Apr 30 17:03:38 2012: control device hw:0
Mon Apr 30 17:03:38 2012: control device hw:0
Mon Apr 30 17:03:38 2012: [1m [31mERROR: Failed to acquire device name : Audio0 error : Cannot allocate memory [0m
Mon Apr 30 17:03:38 2012: [1m [31mERROR: Audio device hw:0 cannot be acquired... [0m
Mon Apr 30 17:03:38 2012: [1m [31mERROR: Cannot initialize driver [0m
Mon Apr 30 17:03:38 2012: [1m [31mERROR: JackServer::Open() failed with -1 [0m
Mon Apr 30 17:03:38 2012: [1m [31mERROR: Failed to open server [0m
Mon Apr 30 17:03:39 2012: Saving settings to "/home/andrea/.config/jack/conf.xml" ...
17:04:11.820 No puede conectarse al servidor JACK como cliente. - La operación global falló. - No puede conectarse al servidor. Por favor revise la ventana de mensajes para mas información.
Cannot connect to server socket err = No existe el archivo o el directorio
Cannot connect to server socket
jack server is not running or cannot be started
La verdad estoy desesperado y no quiero volver al Windows.
Un saludo y un gracias de antemano
Qué tal Pablo. Bueno, antes que nada, te agradeceré treméndamente tu blog, ya que desde hace tiempo me ha permitido utilizar Ardour (no voy a decir si satisfactoriamente o no) en mi SBLive!
ResponderEliminarTengo una pequeña pregunta. Cuando trabajo con Jack, no me interesa saber si hubo una xRun (siempre las hay), y por ende, que el ícono se ponga de COLOR ROJO. Podrá parecer algo trivial, pero yo prefiero que siempre se mantenga del mismo color, así que mi pregunta sería ¿Existe alguna forma de que Jackctl no me informe los XRuns, y si acaso activar el "Modo Tolerante" solucionará mi problema sin afectar en lo más mínimo mi trabajo con Jack?
Por cierto, no se si has hablado sobre SBLive!, pero por si no lo has hecho, sería excelente que informàramos la sencillísima forma de hacerla funcionar de modo multichannel con jack. Avísame si quieres que lo haga!
ResponderEliminarAndrea, tu consulta fue atendida en hispasonic. Dejo el enlace como referencia:
ResponderEliminarhttp://www.hispasonic.com/foros/problemas-jack/400764
Juan Carlos,
Gracias por tus amables palabras :). La verdad, nunca me había puesto a investigar qué es lo que hace el "modo tolerante" ni si podría ser conveniente en algun caso ignorar los xruns. Pero ya que lo preguntas, vamos a verlo. Según "man jackd":
--softmode
Ignore xruns reported by the ALSA driver. This makes JACK less likely to
disconnect unresponsive ports when running without --realtime.
Parece que es lo que estás buscando. No obstante, sería más interesante eliminar su causa en lugar de ignorarlos (aunque no es tan fácil).
Respecto al segundo comentario, Sí claro! Puedes ponerlo aquí mismo como comentario, o cómo hacemos?