Latencia más baja con Jack

  • 1
Irwin J. Cespedes
#1 por Irwin J. Cespedes el 24/11/2010
Hola amigos Linuxeros, tanto tiempo. Y de tiempo se trata la pregunta: ¿Cúal ha sido la latencia más baja que han podido conseguir con Jack en sus máquinas con GNU/Linux? No importa que distro sea, o que Kernel tengan. más bien si tienen ambos mejor.

Mi pregunta viene a colación debido a que mi tarjeta no soporta latencia a 11ms con Jack en modo RT con Kernel Generic, pero si lo logra con ALSA. Aunque es una tarjeta simplona, una CMI 8738 :silbar:, debería de trabajar bien.

De antemano, gracias por su respuesta :teclear:
Subir
OFERTASVer todas
  • -40%
    ¡Precio mínimo histórico! AKAI MPK 261
    298 €
    Ver oferta
  • -26%
    AKAI MPC Key 61
    1.290 €
    Ver oferta
  • -21%
    Zoom H4n Pro Black
    158 €
    Ver oferta
anecochea
#2 por anecochea el 25/11/2010
No sabo qjackctl me tira una latencia estimada de 2.5 ms, con estas especificaciones:
- Distro: Arch Linux
- Kernel RT
- Equipo: Compaq Presario CQ40
- CPU: AMD Sempron SI-42
- RAM: 1 GB
- Tarjeta de sonido integrada RS780 Azalia controller

Jack en RT y en modo sincrónico, 64 cuadros/Periodo y Frecuencia de muestreo 44100

No obstante esta es la latencia estimada que tira qjackctl, actualmente he descubierto que la latencia baja ostensiblemente iniciando jack en la consola:

jackd -R -S -dalsa -dhw:0 -r44100 -p1024 -n2 -Xseq

y manejando las conexiones con patchage. Incluso, si observas, de este modo puedo usar 1024 cuadros/periodo sin aumentar la latencia, por lo menos, que yo lo perciba, es decir, no se escuchan clics al aplicar efectos, y los sintes pesados tipo phasex y bristol funcionan sin problemas.

El asunto es que no conozco una manera de medir la latencia real (no la estimación que te muestra QjackCtl.

Alguien conoce el modo.
Subir
vagar
#3 por vagar el 25/11/2010
LA LATENCIA

Para algunos la latencia
es como la aceleración:
es de vital importancia
arañar unos segundos
al salir del semáforo
(aunque sea por detrás
del viejo camión).

La latencia para otros
es como un miembro viril
pensando que el tamaño importa
aunque no se sepa bien
qué hacer con él.

Otros hay para los cuales
la latencia es un número
a bajar cueste lo que cueste,
como el record del buscaminas.
De esos, no todos saben
cuál de todos los números
que salen en la pantalla
es la latencia.

Los más escépticos afirman
que la latencia es un mito.
Alguien dice que vio una,
pero no le sacó una foto.

Hay quien dice que la latencia
es un estado del alma.
Yo, por ejemplo,
hay días que me levanto
con más latencia que otros.

Pero si no sabes bien,
qué es la latencia,
si no oyes nada raro,
si no echas nada en falta...
no te líes con la latencia,
que estamos en crisis
y el xrun acecha.
Subir
Irwin J. Cespedes
#4 por Irwin J. Cespedes el 25/11/2010
No sabía que Qjackctl no era preciso. A investigar más.

@Igarrido. Joder tío, no tenías quie quebrarte la cabeza con tal poema. solo quería hacer consenso. Mejor pregunto en otro lado. :-k
Subir
anecochea
#5 por anecochea el 25/11/2010
Según dicen la gui qjackctl no añade latencia, quizás cargue la CPU, pero no añade latencia.

No obstante, en mi experiencia, jack desde la consola funciona mejor.

---0---
Por cierto, no tengo claro que es exactamente la latencia, lo único que se es que si paso la salida de un sintetizador por un procesador de efectos (rakarrack, jack-rack o lv2rack), o bien si uso sintetizadores pesados como phasex, bristol, linuxsampler (gui jsampler) o pure data, cuando uso qjackctl, se escuchan unos ruidos molestos (clics y pops). Cuando lanzo jack desde la consola es santo remedio. Me imagino que es un problema de latencia.

Por eso me gustaría poder hacer una medición objetiva con un programa, ya que jack_delay no me muestra nada.
Subir
Irwin J. Cespedes
#6 por Irwin J. Cespedes el 25/11/2010
La latencia es una medida de respuesta del equipo a un evento en específico. Por lo menos, para renderizar audio no es nada critico, ni mucho menos. Donde si es crítico es cuando tienes aplicaciones que necesites que funcionen de forma instantanea al momento de presionar un boton en un control MIDI o una tecla desde el GUI o el Teclado. Una aplicación donde se nota la diferencia en latencias es Mixxx. Si la latencia es muy baja, la respuesta va a ser pésima.
Subir
vagar
#7 por vagar el 25/11/2010
Jajaj, tranqui, Irwin, ya ves que el tono era de coña. Perseguir una latencia baja es perfectamente legítimo siempre que:

a) Se sepa qué es la latencia.

b) Se sepa para qué se quiere bajar.

Todo lo demás son pasatiempos y vaciladas.

Veguita: lo que estás haciendo no tiene absolutamente nada que ver con que sea en modo texto o gráfico. Con esos parámetros lo que haces es subir la latencia de jack (que no del bucle de señal completo) de 2.5 ms a 46 ms (o 70 ms si estás usando jack2 en modo asíncrono). Gracias a eso se van los clics. A menos latencia, más clics. Pon los mismos parámetros en qjackctl y verás cómo te va igual de bien.

Si te preocupa la latencia échale un vistazo a esta página y luego decide si quieres hacer algo al respecto.

http://en.wikipedia.org/wiki/Latency_%28audio%29

Para usar jack_delay necesitas cerrar el bucle de audio de tu tarjeta (conectando un cable de su entrada a su salida).
Subir
vagar
#8 por vagar el 25/11/2010
Joer con el foro nuevo, viva la evolución. A ver si así va mejor el enlace:

http://en.wikipedia.org/wiki/Latency_(audio)
Subir
Irwin J. Cespedes
#9 por Irwin J. Cespedes el 26/11/2010
@Igarrido Tranquilo mi amigo, es la barrera idiomática. Seguro las palabras que escogí son muy pesadas en España, aquí son para reirse.

En fín, como expuse en mi punto, Mixxx es un software que requiere de una latencia muy baja, pero lo que pasa es que el condenado Qjackctl siempre dice 42.5 ms, y de ahi no lo puedo bajar más por que el software se clava y hay que abrirlo de nuevo.
Subir
Irwin J. Cespedes
#10 por Irwin J. Cespedes el 26/11/2010
De todas formas te quedo lindo el poema :cuernos:
Subir
vagar
#11 por vagar el 26/11/2010
Pues es raro lo que te pasa. Yo le puedo poner la latencia que quiera, hasta el mínimo de 0.167 ms (192kHz, 16 bytes, 2 periods) otra cosa es que el sistema lo aguante sin destrozar el sonido con los xruns.

Perdona la ignorancia, no lo pregunto con ironía, porque nunca he usado software de DJ, aunque imagino que lo que hace es sincronizar dos temas al mismo tempo y fase para que coincidan y puedas hacer un crossfade entre ellos sin que haya cortes y se pueda seguir bailando al mismo ritmo. ¿Por qué es importante una latencia baja en Mixxx? ¿42 ms no está bien?
Subir
vagar
#12 por vagar el 26/11/2010
Por cierto, hablando de medir la latencia de bucle con jack_delay... Se trata de conectar la salida a la entrada de la misma tarjeta, pero, ojo si es una tarjeta integrada en un laptop que sólo tiene conectores de MIC y SPKR.

La entrada de MIC tiene impedancia de entrada alta (1 a 20 kOhm) y voltaje de polarización de 5 V para micros electret.

http://www.hobby-hour.com/electronics/computer_microphone.php

La salida de SPKR es de nivel de línea e impedancia de salida baja, 30-400 ohm.

Posiblemente no pase nada si conectas la una a la otra durante un periodo corto de tiempo, pero no están pensadas para eso, así que con cuidadín, que os podéis cargar algo.

Con interfaces que tengan LINE OUT y LINE IN no hay problema, claro, un jack de patch macho-macho y a medir latencias de bucle.
Subir
Irwin J. Cespedes
#13 por Irwin J. Cespedes el 26/11/2010
Alguien escribió:
¿Por qué es importante una latencia baja en Mixxx? ¿42 ms no está bien?


Ni tanto, Si usas un controlador MIDI o inclusive el teclado se necesita que la respuesta sea casi inmediata para que los tracks no queden desfasados. En terminos de latencia Habría que sumar la respuesta humana, que es en promedio unos 0.1 seg, más la latencia que pueda agregar el equipo.

En otras aplicaciones con Mixxx, es cuando se usa Serato, que usa un vinilo con código de tiempo, para manipular el track. Si la latencia es muy alta, la respuesta es muy pobre.

Bien que mal, con 42.5 ms trabaja bien, pero de forma letargico.

Por cierto, quieren ver algo similar a la latencia, hagan este pequeño ejercicio, y veran de que se trata todo este enredo. http://www.topendsports.com/testing/reaction-timer.htm
Subir
vagar
#14 por vagar el 26/11/2010
Si todo son pistas pregrabadas debería ser posible compensar la latencia por software, igual que hace Ardour cuando grabas una pista encima de otra, ¿no?

Tu oyes la pista de referencia por los cascos, por ejemplo un metrónomo, y cantas o tocas encima. Lógicamente hay todo un bucle de latencia enmedio, así que la nueva pista entraría retrasada.

Pero con la compensación de latencia Ardour retrasa la reproducción respecto a la grabación, de forma que la nueva pista cae en su sitio.

Me imagino que tú oyes la pista actual por monitores y la nueva por cascos. No veo ninguna razón por la cual tu software no te puede dar la pista por cascos con compensación de latencia, de forma que te da igual estar trabajando con latencia de 5, 40, 100 ó 1000.

¿Has probado a medir la latencia con jack_delay y a ajustar los parámetros -I y -O de jack?

Que conste que no sé cuál es el workflow de una aplicación de DJ, o sea que igual me estoy equivocando en algo muy básico.
Subir
Pablo_F
#15 por Pablo_F el 26/11/2010
Hola,

Alguien escribió:
Por cierto, quieren ver algo similar a la latencia, hagan este pequeño ejercicio, y veran de que se trata todo este enredo. http://www.topendsports.com/testing/reaction-timer.htm


Qué juego más divertido. Mi récord es 0,308 s pero cuesta un poco bajar de 0,4. No he practicado mucho rato de todas maneras. Con los cronómetros de los relojes digitales mi récord era 0,07 s, aunque bajar de 10 centésimas era todo un triunfo.

Estoy probando jack_delay. Tengo gnome con los efectos de escritorio activados, las dos CPU's en modo perfomance, un kernel 2.6.31-rt, una m-audio 2496, ahora mismo compartiendo número de IRQ con la HDA-Intel integrada (estoy haciendo pruebas)... Con qjackctl, patchage y jack_delay, con 48000 Hz, 32 caudros por periodo y dos periodos por buffer. Sin apenas xruns (2 ó 3 en 5 minutos). Si bajo de ahí, jack arranca (que ya es bastante) pero vienen muchos xruns ahora mismo aunque creo que lo puedo evitar si inhabilito la integrada y hago otros ajustes (demasiado trabajo para algo inútil).

Latencia calculada de bucle completo (y mostrada en qjackctl):

(32 x 2) [frames] x 48000 [frames / s] = 0,00133 s = 1,33 ms

Latencia real mostrada por jack_delay:

pablo@desktop:~$ jack_delay
capture latency = 32
playback_latency = 32
(signal below threshold hasta que hago las conexiones virtuales entre jack_delay y system)
122.611 frames 2.554 ms
122.610 frames 2.554 ms
122.608 frames 2.554 ms
122.607 frames 2.554 ms
122.609 frames 2.554 ms
122.608 frames 2.554 ms
122.608 frames 2.554 ms
...



Desde 64 hasta 123 frames, o lo que es lo mismo, desde 1,33 hasta 2,55 ms son 59 frames o 1,22 ms.

Esta diferencia entre latencia calculada y latencia real de bucle completo se mantiene para otros valores de cuadros por periodo.

Por ejemplo, si subo a 1024, la latencia total son 2048 frames o (sigo en la frecuencia de 48 kHz) 42,7 ms. Si lanzo ahora jack_delay:

capture latency = 1024
playback_latency = 1024
(signal below threshold hasta que hago las conexiones virtuales entre jack_delay y system)
2107.607 frames 43.908 ms
2107.607 frames 43.908 ms
2107.608 frames 43.909 ms
2107.609 frames 43.909 ms
2107.608 frames 43.909 ms
...


La diferencia, 2108 - 2048 = 60 frames. Se mantiene igual. Es una latencia fija que viene dada por el hardware, que tiene que convertir la señal digital que produce jack_delay a señal analógica a la salida y a través del cable va a la entrada donde se vuelve a convertir a señal digital. jack_delay se las arregla para comparar la señal que emite con la señal que captura y deducir la latencia.

Si con una latencia innecesariamente muy baja no tienes xruns genial. Jack está trabajando muy bien en tu sistema, pero no es necesario forzar.

No es "cuanta menos latencia mejor". Es al revés: Cuanta más latencia, siempre que no la notemos, mejor: menos consumo, mejor respuesta gráfica, menor probabilidad de xruns.

Con respecto a mixxx, ni idea. Has probado con un kernel rt y con rtirq_init, a ver si la cosa mejora? No tendrás alguna configuración mala como la frecuencia de la CPU ondemand, o estará tu hardware un un IRQ más poblado de la cuenta?

Más sobre lo mismo:

http://semicorchux.blogspot.com/2010/05/como-medir-la-latencia-real-del-sistema.html

Saludos, Pablo
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo