MIDI y latencia: da más solidez a tus bases
La era de los sintes plugin y su automatización y autocorrección máximas hace que a veces olvidemos cuestiones que vuelven a hacerse presentes cuando introducimos hardware. Es el caso de la consulta que me llegó recientemente sobre la aparición de una latencia/jitter al reproducir un patrón simple de bombo a negras desde un DAW hacia un sampler externo hardware.
Hoy contamos de dónde surgen algunos problemas de ‘timing’ con secuencias MIDI y cómo intentar paliarlos para obtener bases más sólidas. Si tienes prisa, el recetario de consejos está en el último apartado.
El problema
[Índice]Hacía tiempo tenía en la cabeza hablar sobre esta cuestión, y la espoleta ha sido el mensaje de un hispasónico, del que os reproduzco parte:
"Tengo que usar un akai s1000HD con el que sonará una pista de bombo a negras con un sonido grabado de la 909. En Cubase SX3 lleno 2 compases cada uno con 4 bombos (8 en total) y hago bucle para escuchar el resultado. Lo que ocurre es que el primer bombo de cada 4, o sea el 1 y el 5, parece como que se desacompasa del ritmo en unos milisegundos y no es agradable, y enfatizan un poquitín en su volumen. Es un patrón constante. Se nota que no es perfecto y el oído lo percibe en la mezcla. Tengo que hacer la grabación de aquí a poco.
Esto lo he notado con el sample del bombo que es el que mejor marca el ritmo, claro. Pero pasa cuando disparo otro o varios samples independientes junto al bombo. Si sólo escribo el bombo en el cubase parece q el ritmo ya es constante. Como que sólo trabajando con un sample el ritmo es normal."
Conocer con cierto detalle el origen del problema, desmitificar algunas falsas creencias, y ofrecer vías de solución (a las que podréis añadir las de vuestra propia cosecha) es el objetivo de este tutorial. Es información que os ayudará a buscar las mejores soluciones cuando os aparezca, como en el ejemplo mencionado, algún fantasma.
Verdades: MIDI y sus 31250 baudios
[Índice]Todos los mensajes MIDI se componen de bytes en mayor o menor cantidad según el tipo de mensaje. Para transmitir estos bytes se emplea un formato seriado: sus 8 bits se envían uno tras otro, precedidos de un bit de arranque, y sucedidos por un bit de stop (sin paridad) a una velocidad de 31250 baudios. Da lugar a que cada byte dure aproximadamente 320 microsegundos.
El formato de los mensajes MIDI más habituales consta de 3 bytes sucesivos. Hay excepciones a esto como los mensajes de tiempo real y de sistema exclusivo, pero tanto los mensajes de nota, como los de pitch bend y los de cambio de controlador son de 3 bytes, mientras los de cambio de programa o aftertouch de canal son de dos.
En definitiva, como los mensajes más frecuentes son de 3 bytes, implican aprox. un mensaje por milisegundo. Es un importante dato para entender los problemas de latencia/jitter en determinados cuellos de botella que podemos formar al crear tinglados MIDI. Cuando enviamos varias notas pretendidamente simultáneas en realidad están abiertas en sus ataques, tanto más cuantas más notas haya. Quizá no se note con un sonido de tipo colchón suave, pero sí con elementos de percusión, por ejemplo ese bombo a negras de nuestro compañero.
Es además un retraso que no es fijo, dependerá de la actividad que exista en el cable MIDI, y por eso, más que llamarlo latencia, lo trataría como una inestabilidad o jitter. Una inestabilidad que para colmo varía a medida que la canción va tomando cuerpo y se llena de notas y otros mensajes. El patrón perfecto de bombo con el que comenzamos comienza a desdibujarse cuando vamos sumando pistas en el secuenciador y aunque cueste oírlo, se siente esa pérdida de definición y cuadratura de los elementos que más marcadamente señalan obsesivamente el pulso.
La norma tiene previsto un mecanismo (running status) para conseguir pequeña mejora pero no nos aleja suficientemente del riesgo planteado. Con lo cual, la conclusión de este apartado es que cuanto más llenemos de actividad un cable MIDI más nos arriesgamos a inestabilidades de tiempo. Y por tanto la vía de defensa para reducir el riesgo es igualmente clara: intentar reducir la actividad, la densidad de mensajes, que tiene que soportar un cable MIDI. Más adelante concretamos el recetario, pero vamos a aprovechar para eliminar algún que otro un mito.
Mentiras: ¿Quién teme al MIDI Thru?
[Índice]Además del IN y el OUT, la norma MIDI prevé la existencia de un conector MIDI THRU. Es opcional y simplemente constituye una copia de los datos recibidos en la entrada "MIDI IN" que permite encadenar varios instrumentos formando una sucesión (daisy-chain) para circular los mensajes por todos ellos.
No se recomiendan oficialmente (así lo dice la norma) cadenas de más de tres instrumentos. Inadecuadamente, algunos han considerado que ese encadenamiento de varios MIDI Thru no se recomienda porque añade tiempo en cada paso y retrasa la producción de las notas en el último equipo de forma que pueda ser perceptible.
No es cierto. La conexión THRU es un eco de lo que llega por IN, y es cierto que es un eco ‘activo’, no es sólo cableado. La señal se regenera eléctricamente antes de salir por la conexión THRU. Pero esa regeneración opera a un nivel muy elemental de electrónica que típicamente implica un par de microsegundos. Es por tanto totalmente despreciable, respecto al milisegundo que ya gasta de por sí enviar un mensaje de nota vía MIDI. Podríamos enganchar cadenas de decenas de instrumentos sin que esta pueda ser señalada como la causa de ningún retardo apreciable, porque lo que domina es el tiempo que consume en sí la transmisión de un mensaje MIDI elemental.
La topología ‘daisy-chain’ es una conexión muy sencilla y útil. La razón real de que la norma no aconseje enganchar muchos equipos en esta forma es que puede mover un poco los flancos de los bits individuales de sitio, pero salvo en casos extremos, con cables larguísimos y de pésima calidad, no llegará a tal deformación que pueda provocar errores. Estad tranquilos: podéis enganchar mucho más allá de esos 3 equipos en una sucesión de MIDI THRU sin ningún tipo de degradación ni retardo. Pero este mito ha ayudado a vender MIDI Thru Boxes.
MIDI THRU boxes no son la solución
[Índice]Para evitar cadenas largas, los fabricantes idearon los MIDI THRU Box, dotados de un MIDI IN que se replica hacia varios MIDI THRU a la vez. Ciertamente si la conexión MIDI THRU no es el origen del problema de los retardos, tampoco un MIDI THRU Box es ninguna solución. Pero lo que quiero recalcar en este apartado es cómo a veces un mal uso de un MIDI THRU Box puede agravar las cosas frente a otras posibilidades que nos resultan hoy incluso más baratas.
El problema, común al encadenamiento sucesivo (daysi-chain) y al tipo estrella (con MIDI THRU Box), es que cuando tenemos muchos equipos colgando de una única conexión, en el ejemplo la salida única desde el ordenador, es más fácil llegar a congestionar ese único cable MIDI. Pensadlo un momento. Arranque del tiempo 1 de un compás. Suenan bombo, hat y otros 3 o 4 elementos de percusión en el canal 10, un bajo en el canal 2, un pad de 6 voces en el 4, un acorde de piano con 5 notas en el 6, … Combinad el resultado y tenéis más de 15 notas peleando por salir hacia el único Out del DAW.
Pero tienen que salir ordenaditas, una detrás de otra: no olvidéis que es transmisión en serie. A razón de un milisegundo cada nota, ese ‘tutti’ sincronizado se ha convertido en una dispersión de ataques distribuida a lo largo de más de 15 milisegundos. Aquello que me contaban de que “se nota que no es perfecto y el oído lo percibe en la mezcla”.
Ese problema no se reduce por el uso de MIDI THRU Box, incluso se agrava, porque tenemos tendencia a enganchar todo al THRU BOX, en vez de pensar en otras formas de conexión. Es tan bonito tener todos los cables concentrados ahí, y de paso justificar el desembolso de la compra del MIDI THRU Box. Pero haciéndolo estamos entrando en arenas movedizas: las notas se nos podrán mover y desalinear respecto a la pretendida rejilla de tiempo.
Entonces ¿MIDI Patchbays?
[Índice]Ya puestos a gastar, en vez de un MIDI THRU Box, mejor un MIDI Patch bay, con varios IN y varios OUT, y que permita establecer caminos, rutas, filtrado de mensajes, etc. Si es más caro (mucho más) será mejor, ¿no?. De nuevo podremos ahorrar algo de dinero y algún disgusto, sin matar moscas a cañonazos. Hay ocasiones que requieren un MIDI PatchBay, pero otras muchas a día de hoy ya no.
Un MIDI Patchbay es un elemento que permite configurar las conexiones entre entradas y salidas que se desee. Hay algunos Patch Bays MIDI muy simples que sólo permiten decidir qué entrada queremos llevar a cada salida (como el Kawai MAV-8). Algunos son Patchbays a nivel físico, que conectan unas entradas con unas salidas mediante electrónica, sin analizar para nada los mensajes. Pero muchos son inteligentes y permiten analizar los mensajes y tomar decisiones a la hora de rutar. Por ejemplo pueden permitir eliminar algunos tipos de mensajes hacia ciertas salidas, enviar ciertos canales por una salida o no, o combinar señales de dos entradas para entregarlas a una salida (MIDI Merge), y cosas de ese tipo. Por ejemplo el Roland A-800 o el Akai ME-30-P.
Algunos más avanzados incluso permiten remapear controladores y mensajes de cambios de programa (crear una tabla para cada salida en la que se especifican cosas como que si por la entrada llega el cambio al programa 8 en cierta salida se sustituya por cambio al programa 37).
Los patchbays inteligentes son útiles sin duda, pero como deben analizar mensajes completos (la mayoría multi-byte) necesitan almacenar y procesar los bytes que van llegando. Sólo cuando han llegado los 3 bytes de una nota puede analizarse esta y tomar la decisión de a qué salidas llevarla o cómo transformarla. Eso implica una latencia algo mayor. Generalmente no estaremos nunca enganchando toda una sucesión de elementos inteligentes, sino que a lo sumo estaremos usando un único patchbay hacia cada equipo final. Pero como veis, salvo que sea imprescindible usar su inteligencia, nos añadirá al menos un milisegundo más de retraso. Y realmente con la cantidad de inteligencia que tienen ya nuestros equipos pocas veces hace falta suplementarla con patchbays inteligentes. Mejor programa las capas en el sinte y no las crees por medio de canales: evita el uso de un patchbay para duplicar notas hacia otro canal. De igual manera, si necesitáis filtrar determinados mensajes o controladores, mirad primero si podéis hacerlo en el sinte, y no acudáis sólo por esa causa a intercalar un patchbay/procesador MIDI inteligente. Usad la inteligencia de vuestros equipos sin renunciar a la vuestra propia.
Con elementos que sean críticos en cuanto a su ‘timing’, quizá debamos pensar en esquivar en lo posible el paso por un patchbay, especialmente si es uno inteligente que realiza procesamiento de los mensajes. El instrumento que hará el papel de bombo, mejor conectado directamente, sin intermediarios.
No significa que debamos desterrar el uso de MIDI Patchbays, pero yo los reservo para situaciones en las que es necesario con frecuencia cambiar conexionado y no queremos estar liados con toqueteos de cables. O también para situaciones en las que requerimos funciones MIDI Merge. Asumiendo el que eso nos dará al menos 1 milisegundo de retraso adicional, que al fin y al cabo no es tanto. Pero a la vez vigilando siempre que las combinaciones que haga no sobrecarguen los puertos MIDI con acumulación de muchos mensajes.
La regla: divide y vencerás
[Índice]Y es que esa debe ser nuestra regla de oro: llegar a distribuir en puertos MIDI diferentes (no canales, sino puertos, conexiones) todo lo que podamos. Y la segunda sería: mejor cuanto más cerca, no en cuanto a la longitud de los cables, sino a evitar el paso por elementos intermediarios inteligentes como son MIDI Patchbays, MIDI Mergers, etc.
Para los propósitos que estamos tratando, es infinitamente mejor tener un puerto MIDI para cada sinte o equipo (si hace falta comprando otro interfaz MIDI para el ordenador) que combinar varios equipos MIDI separados por canales y usando un único interfaz/cable (más la consabida cadena MIDI Thru o un ThruBox). Piensa si la compra que te interesa, más que la de un THRU Box, puede ser la de interfaces MIDI para poder ligar cada equipo al DAW con cableado dedicado. No son caros a día de hoy y son la solución ideal porque te ofrecen la independencia de conexión física que es la única que puede reducir los cuellos de botella.
Sólo de esa forma evitaremos en la medida de lo posible la congestión del puerto MIDI por exceso de tráfico de mensajes.
Entendiendo USB-MIDI
[Índice]Hablar de comprar interfaces MIDI a día de hoy nos lleva a pensar en USB-MIDI, a propósito del cual conviene conocer varias cuestiones.
La primera, aunque sorprende a muchos, es que la velocidad a la que opera la transmisión de mensajes MIDI en estos sistemas es la misma que en MIDI tradicional. Es cierto que USB funciona físicamente a velocidades de varios mega bits por segundo (decenas e incluso centenas), pero los mensajes en USB MIDI no aprovechan esa mayor capacidad.
Excepciones hay. Por ejemplo Elektron en algunas de sus máquinas permite configurar un modo no estándar que aplica USB MIDI a velocidad x10. Es útil para que sus máquinas dialoguen más velozmente con el ordenador y se agradece por ejemplo al realizar volcados de muestras hacia Rytm, dado que usa el MIDI SDS (Sample Dump Standar) que es todo un prodigio de lentitud. Pero, salvo estos casos atípicos, los interfaces USB MIDI rinden en cuanto a la transmisión de los mensajes MIDI a la misma velocidad útil que los tradicionales DIN5P.
Otra cuestión importante en relación con USB-MIDI es el hecho de que pese a que sea un solo cable, permite reunir varios puertos. La norma USB-MIDI permite que por un único cable USB se gestionen 8 puertos MIDI totalmente independientes, cada uno con sus 16 canales In y sus 16 canales Out. Un interfaz USB-MIDI multipuerto puede tratarlos con autonomía, sin añadir congestiones innecesarias. Pero, eso sí, recordad que son los puertos los que son independientes. Si usáis varios canales de un mismo puerto, sí entran en el tipo de conflicto que estamos tratando, porque la velocidad final de cada puerto es en realidad la de los tradicionales DIN5P.
Hay también algunos sistemas USB-MIDI que aplican el envío de mensajes desde el DAW ‘anticipado’. Los mensajes llegan al interfaz junto con una marca de tiempo que dice cuándo hay que hacerlos sonar (un ‘time-stamp’), pero soy poco favorable a esta cuestión: al final si los mensajes tienen que llegar a un sistema externo (ya sea vía USB-MIDI o MIDI DIN5P) la velocidad es la que es, y tendremos que seguir siendo nosotros quienes diseñemos una planificación adecuada de las conexiones para evitar las sobrecargas de mensajes.
Quiero más y más (o quizá ya lo tienes)
[Índice]Demos otro paso para seguir ahorrando un poco. La solución muchas de las veces no pasa por comprar otro interfaz MIDI para cada nuevo equipo. En realidad, a día de hoy muchos de los sistemas que usamos tienen conexión USB-MIDI y pueden unirse directamente con un enlace físico propio (su propia conexión USB) a un DAW. Con ello garantizamos de inmediato que cada uno de ellos reciba sus notas y sólo sus notas (así como el resto de mensajes). No hay necesidad de combinar los mensajes para todos los equipos y que se peleen por el uso de un único cable. No abuses de cadenas MIDI Thru cuando puedes ligar cada instrumento al ordenador con su propio cable USB. Si queda más feo el lío de cables, cierra los ojos y disfruta con las orejas.
Pero además muchos de esos equipos dotados de USB-MIDI tienen a la vez el par In/Out MIDI en el clásico DIN 5 puntas y pueden configurarse para usar independientemente ese par. Me refiero a que muchísimos equipos que cuentan con una conexión USB-MIDI montan a través de ella varios pares In/Out (aprovechando eso de que pueden albergar hasta 8 puertos lógicos que usan un único cable USB físico). Uno quizá dirigido hacia las tripas del propio equipo (su teclado y su generador de sonido en el caso de un sinte) y otro quizá para esos clásicos In/Out DIN5P. USB-MIDI permite esa magia de que un solo cable actúe en realidad como vía para montar varios puertos independientes.
Sucede en muchísimos controladores, teclados y equipos de todo tipo. Sólo citaré dos casos. Los Novation Remote a través de USB hacen aparecer varios puertos MIDI en el ordenador. Uno se refiere a sus propios controles (pulsadores, faders, encoders, etc.) y los mensajes que generan, y otro se refiere a las conexiones MIDI en DIN5P. Es decir, cuando conectas un Remote a un ordenador, además de servirte sus propias funciones como controlador en un puerto, puede aportar esas conexiones In/Out en otro puerto: sin tráfico de mensajes del propio Remote, y actuando como mero puente para conectar un dispositivo MIDI externo al ordenador. Hay muchísimos (más de los que sospecháis) equipos que permiten ese tipo de uso, en el que el sistema además de sus propias funciones, nos actúa como interfaz MIDI para que conectemos alguna otra cosa a su través, pero manteniendo la independencia de puertos.
El otro caso que quería comentaros es el de uno de los teclados que tengo (el MOXF de Yamaha). Conectado por USB-MIDI aparece en el ordenador como nada menos que 5 puertos MIDI. Uno es el referido a su uso como teclado/sintetizador, otro es el que se refiere al uso de sus botones para controlar DAWs (buena idea que vaya ese control en otro puerto para simplificar las cosas), un tercero es tal cual una réplica de las conexiones In/Out que lleva en DIN de 5 puntas (y permite enganchar un sistema MIDI externo que se hace visible en el ordenador mediante ese puerto dedicado), los otros dos son ya cosas muy específicas del MOXF: los usa Yamaha para llevar por vía independiente toda la información que se intercambia con el software de edición de sonidos y parámetros del MXOF (magnífico: aunque usemos el editor no compite con las notas que el DAW envía al sinte).
Seguramente algún interfaz audio USB que ya tenéis cuenta con también con conectores MIDI In/Out que no usáis y que admiten este juego. En definitiva, con toda esa variedad de puertos que posiblemente ya tenéis, un rato de reflexión, manuales, y esbozos en papel puede haceros llegar a una configuración de interconexión de vuestros sistemas que aproveche al máximo la inversión que ya tenéis sin tener que comprar más interfaces, pero que a la vez os permita hacer que cada sinte y equipo MIDI tenga su propia conexión (su propio puerto) dedicado con el ordenador / DAW.
El recetario de consejos
[Índice]Hay que tener claro el verdadero problema de la mal llamada latencia en MIDI, que más precisamente sería un jitter: el que lleguemos a acumular tantos mensajes que se note el cuello de botella mientras esperan a ser despachados. Tenemos que pensar en la congestión de cada puerto (es un problema que sucede en relación con cada puerto de forma autónoma) y buscar formas de reducirla.
- Lo principal: intenta si puedes usar un interfaz/puerto MIDI dedicado para cada equipo, sin ocupar los canales MIDI sobrantes para otras cosas. De esa forma lo que consigues es que ese por ese cable/puerto MIDI sólo vayan las notas que realmente ha de ejecutar un único sistema. Lo que tengan que tocar otros instrumentos, mejor por otros interfaces, para descongestionar cada conexión. En el caso de sistemas centrados en un ordenador es sencillo. Bastaría tener interfaces MIDI multipuerto, o bien varios interfaces MIDI. Sin olvidar lo mencionado: muchos sistemas USB-MIDI nos regalan la posibilidad de usar independientemente sus conexiones MIDI DIN5P y actúan como interfaces MIDI adicionales.
- Desde luego intenta evitar la abundancia innecesaria de mensajes como pitchbend, controladores, etc. que estén reclamando ocupar el bus MIDI. Opta por capas en el sinte y no por duplicar notas en varios canales, etc. Especialmente esos momentos críticos como inicios de tiempos fuertes (no sólo ese instante, también un poco antes) y especialmente en equipos de percusión o que generen sonidos con transitorios muy marcados.
- Los propios secuenciadores y DAWs llevan a menudo rutinas para ‘adelgazar’ la cantidad de mensajes de controlador y pitch bend. Conócelas y aplícalas cuando encuentres problemas, como mal menor.
- Intenta estudiar en el manual cómo trata tu DAW/secuenciador las diferentes pistas en cuanto a prioridad. P.ej. algunas DAW dan prioridad a los mensajes de nota que están en las primeras pistas (altas en pantalla) respecto a las últimas (las más bajas). Así que cosas como bombo, etc. deberían ir a esas pistas privilegiadas.
- Retrasa un poco las notas o pistas de los instrumentos MIDI menos críticos. Por ejemplo un pad con ataque lento no sufre por que lo desplaces un poco, y así evitas que sus notas compitan en ese momento estrella de los arranques de tiempo, para dejar así que las notas del bombo y demás vayan solas por la autopista y lleguen más rápido. Muchos secuenciadores permiten configurar un ‘retardo’ MIDI en cada pista. Sácale partido, retrasando a propósito las pistas de sonidos suaves.
- Otra cuestión también interesante, aunque no siempre factible es pensar si podemos usar el secuenciador interno de alguno de los sintetizadores, especialmente en el caso de cajas de ritmo. En lugar de volcar al DAW o secuenciador principal la información que corresponde a las partes que han de ejecutar esos sintes / cajas de ritmo, limitarnos a sincronizarlos con el DAW / secuenciador principal y realizar en ellos mismos la programación. Pero las más de las veces esto puede suponer un impacto demasiado grave a la hora de definir la forma de trabajo (las posibilidades de esos secuenciadores hardware a menudo palidecen frente a los sistemas software, y pocos querrán tener un tema desmembrado en tres o cuatro máquinas diferentes en vez de concentrado en un único entorno DAW). No pocas veces he usado las bases programadas en una caja de ritmo y he disparado sonidos adicionales, rellenos y adornos desde una pista en un secuenciador.
- Evita el paso por patchbays, mergers, etc. cuando no sea estrictamente necesario. Cuanto más directa sea la conexión menos tiempo se gastará.
- Una posibilidad si las cosas pintan mal, mal de verdad, pasaría por grabar una a una las pistas MIDI en audio, evitando que las demás pistas que compitan por el uso del puerto MIDI estén metiendo sus mensajes (haciendo mute de ellas para que no salgan vía MIDI), como forma de conseguir la mejor toma posible de cada pista que lo necesite.
- Aunque es una contribución mínima de un tercio de milisegundo aprox., los mensajes MIDI real-time (MIDI Clock, Play, Stop, etc.) se pueden colar en medio de otros, tienen permitido en la norma insertarse incluso a mitad de otros mensajes. Si no necesitas enviar esos mensajes hacia un módulo determinado, evítalo en la configuración de sincronización en tu DAW: puedes impedir que se envíen esos mensajes por el interfaz MIDI que alcanza a esa fuente de sonido.
Y por supuesto, todo lo anterior debe considerarse bajo la referencia de que hablamos de alcanzar vía MIDI a sistemas hardware. Si lo que tenemos son sintes soft (plugins, etc) trabajando internamente en un entorno DAW, estas cuestiones desaparecen, porque los mensajes no viajan vía MIDI sino que se entregan al instante y además los sistemas de automáticos de compensación de latencia intervienen también para ayudar durante la reproducción anulando incluso el efecto del tiempo de cálculo del propio plugin.