Configuración de latencia en Jack, xrun's y otras cosas

--107977--
#1 por --107977-- el 18/02/2011
Hola!

Bueno, empecemos, el caso es que no estoy seguro de que mi configuración de jack sea la correcta, es la siguiente:

Cuadros/Periodo:128
Frecuencia de muestreo:192000
Periodos/Buffer:2

Esto da una latenciade: 1,33 milisegundos

Mi SO operativo es Tango Studio una distribución dedicada al audio, trabaja con kernel realtime, y según CREO, que esta basada en Ubuntu. (Por cierto, muy recomendada)

Obviamente esta no es toda la configuración, si no solo la que afecta directamente a la latencia (si estoy equivocado corregidme), la pregunta es, es la configuración idonea?, deberia conformarme con esa latencia?

Lo segundo:
Probando a bajar aun más la latencia me daban xruns, tengo entendido que son como ligeros cortes en el sonido, pero no lo tengo del todo claro, podriais darme una explicación mejor?


Lo tercero y último:
Porque hay que usar una baja latencia para grabar pero sin embargo para mezclar y otras cosas no importa tanto la latencia?


Gracias de antemano :)
Subir
#2 por joanillo el 18/02/2011
En tus preguntas hay mucha tela. Primero decirte que (por lo que un humilde servidor sabe), nadie trabaja con un muestreo de 192000 (¿qué tarjeta tienes?). Con el estándar de 48000 o 96000 hay suficiente.

No hay que obsesionarse con la latencia. Es importante no tener XRuns. Entre 5 y 10ms està bien, pero se puede trabajar con más (pregúntale al organista de la iglesia, eso sí que es latencia). Cuanto menos latencia, más posibilidades de XRuns.

La fórmula de la latencia es:

latencia = (periodos * frames) / sample_rate

aquí se ve claramente como aumentando el samplerate disminuye la latencia, y como haciendo más grandes los buffers de memoria (periodos*frames) aumenta la latencia.
Para entender esta fórmula, mírate los enlaces
http://www.linuxjournal.com/article/6735?page=0,1 (fíjate bien en el gráfico)
http://www.hispasonic.com/comunidad/introduccion-kernel-t276319.html (explicación pedagógica de Luis Garrido)

La idea es que la tarjeta de sonido tiene un buffer (buffer hardware) y ALSA tiene otro buffer (buffer software, RAM), y hay un volcado de uno a otro (cuando se graba, del primero al segundo; cuando se reproduce, del segundo al primero). El volcado se hace cuando el buffer está lleno. (Además, las aplicaciones también tienen su buffer. Se utiliza DMA para el volcado de buffers software). Cuando los buffers están llenos es cuando se hace la transferencia. Para tener baja latencia hay que hacer transferencias rápidas (aumentando el sample rate o disminuyendo el tamaño de los buffers). Pero ello tiene el problema de que los buffers están estresados, y es posible tener cuellos de botella que hacen perder información (muestras que se pierden, provocando chasquidos: los XRUN).
Por contra, si la latencia es baja, el sistema tarjeta de sonido-ALSA-aplicaciones va todo relajado (pero claro, nadie quiere pulsar una tecla y oir el sonido al cabo de 40ms, cuando el efecto es perceptible).

Para responder la tercera pregunta. Cuando grabas, no importa trabajar con latencia, lo que importa es que no se pierda ninguna muestra, asegurarse de que no haya XRuns. Cuando grabas tienes que asegurarte que el buffer de la tarjeta de sonido se puede transferir bien al buffer software (haciéndolo mayor, con el perjuicio de aumentar la latencia). Por contra, cuando tocas es muy molesto tocar con latencia. Hay que bajar la latencia (quizás originando algún chasquido...). Para disminuir la latencia hay que hacer volcados rápidos a la tarjeta de sonido, que va a trabajar estresada.

Como resumen, y para hacerse una idea didáctica, conviene pensar en el flujo de datps, quién genera los datos y quén se los come. Tenemos una aplicación cliente de JACK-ALSA; el servidor JACK-ALSA; i la tarjeta de sonido:

* playback: vkeybd > fluidsynth > JACK-ALSA > tarjeta de sonido
* recording: tarjeta de sonido > JACK-ALSA > Ardour

Att,
Joan Quintana
http://wiki.joanillo.org/index.php/P%C3%A0gina_principal#Inform.C3.A0tica_musical
Subir
--107977--
#3 por --107977-- el 19/02/2011
Muchas gracias por la respuesta, de hecho me ha quedado todo bastante claro.




Gracias!
Subir
#4 por catorze el 24/02/2011
joanillo escribió:
(pregúntale al organista de la iglesia, eso sí que es latencia)


jajajaja que bueno, me ha hecho mucha gracia, si señor!
Segun mi experiencia y depende de que instrumentos toques sobre 10 milisegundos o menos no se nota a efectos prácticos la latencia, a partir de 10 ya empieza a notarse, sobretodo si tocas un instrumento de viento y te estas monitoreando, pero para eso lo mejor es monitorearse directamente por la tarjeta (si se puede vamos...) es lo que hacen la mayoria.
Salut!
Subir
Respuesta rápida

Regístrate o para poder postear en este hilo