19 marzo, 2013

Buffer y Latencia.


QUE ES EL BUFFER?

Para comenzar, recordemos algunas cuestiones básicas sobre audio digital: 

La reproducción y grabación de audio digital, requiere de un procesamiento de flujo continuo de datos, que consumen recursos del procesador, y que implican un trabajo constante de conversión analógico digital a cargo de nuestra placa de sonido: para que podamos grabar y escuchar lo grabado, la placa debe convertir constantemente el audio analógico (corriente alterna) en un flujo de datos digitales (secuencias de bits), y viceversa. Para esto, al grabar "recorta" la señal: toma muestras (samples) en pequeños intervalos de tiempo, y las analiza para asignarles un valor binario a la amplitud de cada una. Para reproducir el sonido, realiza la tarea opuesta, conviertiendo la señal digital, en analógica nuevamente.

Ningún sistema operativo puede hacer en realidad, todo a la vez. Los sistemas multitask (multitarea) como Windows o Mac OS, funciona ejecutando programas o tareas en turnos. Entonces, para poder  mantener un flujo continuo de audio, pequeñas cantidades de RAM del sistema (buffers) se utilizan para almacenar y procesar temporalemente una parte de ese audio a la vez.
Esa pequeña parte de RAM, que almacena y procesa temporalmente una cantidad de samples, antes de pasar a la siguiente tarea, se llama BUFFER
Para reproducir, la placa de audio debe volver todo el tiempo sobre el buffer, accediendo a los datos de sonido. Inmediatamente después el sistema operativo, corre a realizar alguna otra tarea, y si tenemos suerte, puede volver a tiempo a la tarea de  audio, y sostener el flujo de datos continuo necesario para que el  sonido funcione.
De forma similar, durante el proceso de grabación, la información que entra, va  "llenando" la capacidad de ese buffer y el SO (sistema operativo) debe buscar por tandas los datos para guardarlos en el disco rigido, vaciar el buffer y volver a empezar a tiempo.


QUE ES LA LATENCIA?
Como dijimos antes, para grabar y reproducir música en la compu, existe un proceso de conversión de la señal de audio, de analógica a digital y viceversa. Como todo proceso, esta tarea lleva tiempo.
Por eso, aunque escuchemos el sonido casi inmediatamente, siempre existe una diferencia de tiempo (con suerte, imperceptible) entre el sonido de entrada, y la salida, marcada por el tiempo necesario para su procesamiento. Cuando el tiempo que la PC necesita para procesar esa información crece, ese desfasaje se hace notorio y entorpece la práctica musical durante la grabación, impidiendo que el músico pueda mantener el tempo o ser correcto ritmicamente.
Esa diferencia de tiempo, que provoca un desfasaje entre lo que tocamos, y lo que escuchamos, se denomina LATENCIA
Por qué sucede? Cuando el tamaño del buffer es muy grande, la PC conserva una gran cantidad de samples para su procesamiento, y se toma un tiempo mayor para resolver tareas. Ese tamaño de buffer, permite procesar tareas mas complejas (efectos, plugins, etc…), pero aumenta el tiempo de procesamiento, provocando latencia.

Por eso, al grabar es recomendable utilizar un buffer mas pequeño, porque a pesar de que nos permite una menor capacidad de procesamiento (lo que implica menos efectos, y plugins), esa configuración, disminuye al mínimo el tiempo que la PC se toma para resolver cada tanda de tareas, y por lo tanto, baja  el tiempo de latencia y permite al músico, tocar cómodo y no perder el tempo.



QUE ES EL GLITCH?

Disminuir el tamaño del buffer, resuelve rápidamente el problema de latencia, pero tiene lamentablemente, algunas consecuencias  laterales. 

Si el buffer es muy pequeño, y nuestro procesador no es muy veloz, los datos se agotan rápidamente antes de que el SO pueda volver a buscarlo para su reproducción, o a vaciarlos para permitir continuar con la grabación. Entonces, se obtiene un "gap" (interrupciones) en el flujo de datos (audio streaming). 

Esto provoca ruidos, que suenan como un clicks, un pop o crackles. Estos ruidos provocados por gaps en streaming de audio, se denomina GLITCH

Si el tamaño del  buffers es demasiado pequeño, el “glitch” ocurre en mayor cantidad, e incluso puede provocar pequeñas interrupciones del sonido. Aumentar el tamaño del buffer, resuelve este problema.

Cuando mezclamos y masterizamos, usamos muchos plugins e instrumentos virtuales. Entonces, es necesario incrementar el tamaño del buffer (a pesar de que aumente la latencia), para que la PC trabaje menos exigida y podamos escuchar el audio libre de clicks. 



COMO CONFIGURAR EL BUFFER ENTONCES?

Muchas placas tienen la opción de modificar el tamaño del buffer,  lo que incide directamente en los problemas de latencia y glitching. Configurarlo es simple, solo hay que tener en cuenta algunas cosas:

- Realizar tareas complejas (muchos efectos, vst, plugins…) implica mayor tiempo de procesamiento.  Si la computadora no tiene los recursos necesarios, vamos a obtener interrupciones en el flujo de datos, provocando glitching.  La solucion, es entonces aumentar el tamaño del buffer.

- Sin embargo, aumentar el tamaño del buffer, aumenta la latencia. La pc va a procesa mayor cantidad de samples antes de pasar a la siguiente tarea, aumentando el tiempo que implica dicho proceso. Esa latencia, va impedir la correcta performance del músico durante la grabación. La solucion, es entonces disminuir el tamaño del buffer.


En condiciones normales, un buffer de 512 samples es suficiente para no tener latencia durante la grabación, aunque si tenemos una PC potente podemos bajarlo a 256 o incluso a 128. Para la mezcla, en cambio, generalmente alcanza con aumentarlo a 1024, y si no es suficiente podemos duplicarlo a 2048.



ALGUNOS TIPS GENERALES

-Para solucionar la latencia, disminuimos el tamaño del buffer (125 samples)

-Para solucionar el glitching, aumentamos el tamaño del buffer  (1028 samples)
 Un buffer más grande es recomendable para realizar más tareas complejas  (vst, pluging, automatización)

 
Por eso:

- Cuando grabamos: diminuimos el tamaño del buffer, ya que es deseable tener la menor latencia posible.

- Cuando mezclamos: aumentamos el tamaño del buffer, para poder procesar correctamente tareas complejas (efectos, automatización, vst). En este caso, la latencia no importa, ya que es la misma para todas las pistas, pero necesitamos escuchar con la mayor calidad posible.


PARA LOS QUE NO TENGAN PLACA:

Si tu placa no tiene la opción para corregir el tamaño del buffer, o si directamente no tenés placa, una opción es instalarse asio4allun driver gratuito y universal que permite corregir el tamaño del buffer. 

Se descarga aca:
http://www.asio4all.com/

8 comentarios:

Anónimo dijo...

HERMOSISIMO EL TEMA DESARROLLADO.

Unknown dijo...

El buffer es la capacidad de almacenamiento de sistema operativo o de la interfaz

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...

muchísimas gracias muy bien explicado

Unknown dijo...

Muy buena la información..Soy novato en la tecnología..

Unknown dijo...

Me interesa saver soble sinido

Unknown dijo...

Grann gran informacion!

Exmister dijo...

Una explicación breve y rebosante de claridad. Muchas gracias por regalarnos tu tiempo