¿Mac OS agrega 20 ms de latencia a midi?

Estoy explorando el rendimiento midi en OS X

Mi plataforma de prueba es un parche puredata que envía una nota en una interfaz midi, luego mide el tiempo que tardó en volver a otra.

Probé diferentes hardware y software como interfaces de entrada/salida:

  • bidule (software)
  • nodejs personalizados con node-midi
  • una interfaz irig usb-midi con un cable midi entre la entrada y la salida
  • software personalizado creado con la biblioteca c ++ rtmidi
  • os x bus IAC incorporado

Siempre obtengo un retraso de 10 a 30 ms para el viaje de ida y vuelta (puredata MIDI OUT -> interfaz -> puredata MIDI IN), así que supongo que hay entre 5 y 15 ms perdidos en la entrada y lo mismo en la salida.

Probé la misma configuración con abeton live en lugar de puredata y obtuve el mismo resultado.

¿Alguien es testigo del mismo tipo de resultado, o mejor, tiene una solución?

Si lo hiciera, estoy bastante seguro de que lo sabría, porque 20 ms es MUCHO. ¿Cuál fue exactamente tu configuración de Ableton Live? Uso Live como un enrutador MIDI todo el tiempo y nuevamente siento que encontraría 20 ms ridículamente molestos e imposibles de tocar. ¿Qué interfaz(es) MIDI está(n) usando exactamente? ¿Has probado/usado controladores MIDI USB?
Midi siempre generará al menos 10 ms por dispositivo. Es en serie y no tiene una función verdadera, por lo que siempre será una retransmisión, y eso sin procesamiento adicional involucrado.
@ToddWilcox: mi comentario es sobre la interfaz en sí. Enrutamiento interno en estos días, no esperaría ningún retraso notable. [Aunque han pasado muchos años desde que tuve que encadenar en serie teclados midi, o realmente lidiar con cualquier salida midi. En estos días tengo un teclado maestro, todo lo demás está en el software;)
@Tetsujin Tal vez estoy sobreestimando qué tan detectable es 10 - 15 ms. Sé que con audio a través de una computadora más de 8 ms es bastante molesto para mí. Acabo de conectar un viejo teclado MIDI con un cable DIN a una interfaz Thunderbolt, lo ejecuté a través de Live y luego volví a conectarlo a un sintetizador con USB MIDI y... Si hay una latencia de 10 ms o más, no se siente así, pero, de nuevo, tal vez no lo notaría tanto como creo. Cuál es otra pregunta para el autor de la pregunta: cualquiera que sea la latencia que estés teniendo, ¿está obstaculizando tu capacidad para hacer música?
@ToddWilcox tbh, en el pasado, consideraríamos 15-20ms lo suficientemente cerca para una parte de batería. Los dispositivos GM generalmente se priorizaban en el canal 10 [batería] y luego en 1 ->16. La percepción humana siempre se ha presentado como, "cualquier cosa por debajo de 7 ms es solo una fase, 10-20 es un flam, 30-50 comienza a volverse muy perceptible", pero solo soy yo reciclando vieja sabiduría recibida, no es algo que haya hecho. comprobado por mí mismo. También creo que te puedes acostumbrar rápidamente a tocar un poco por delante. Es decir, los guitarristas lo hacen todo el tiempo... el 'centro' de su ritmo no es cuando golpean la cuerda, es cuando la sueltan.
@ToddWilcox mi configuración de ableton era un clip con una nota enrutada a la salida y otro canal de grabación como entrada. La interfaz de hardware era un iconnect2. Obtuve el mismo tipo de resultado con el IAC de Apple como interfaz y con PureData en lugar de ableton. Eso es realmente triste ...
@EdwinJoassart ¿Estás ejecutando audio y luego volviendo a entrar? Porque la latencia de audio puede superar fácilmente los 20 ms en muchas interfaces.
@ToddWilcox sin audio, era una configuración midi pura para probar solo la latencia midi

Respuestas (2)

Para responder a la primera parte, no, las Mac no presentan inherentemente ninguna latencia. CoreAudio es sólido como una roca, tiene una sobrecarga extremadamente baja y es una de las principales razones por las que la gente elige Mac para el audio. Obtengo una latencia de < 2 ms en Ableton con mi Apogee Duet.

Lo más probable es que su latencia provenga de la interfaz. Probablemente haya algún editor externo con un tamaño de búfer o una configuración del tipo "habilitar compensación de retraso".

No usaría Node ni nada que ejecute JavaScript para audio. Está bien para los juguetes de audio web, pero los idiomas interpretados no son buenos para nada con una latencia muy baja.

Tengo una latencia de sub-ms con nodo cuando uso OSC en lugar de midi. Quiero decir que no es un problema de nodo, incluso cuando cambio mi parche de nodo casero con ableton live, obtengo el mismo resultado de 20 ms. Y parece que no es un problema de interfaz ya que probé 3 interfaces diferentes (hardware y software) y obtuve el mismo resultado. Es por eso que sospecho que os x es el problema.
Y para complementar mi respuesta. La idea con este software de nodo es hacer un prototipo rápido. Y una vez validado, reescriba el motor como C ++, solo manteniendo la interfaz como una aplicación de nodo-webkit. ;)

¡Finalmente encontré la razón!

En realidad fue culpa de Ableton. Hablamos con un ingeniero de Ableton que nos explica que está ocurriendo algo de magia negra en la pila Midi de Live. Retrasará algunos midi para que coincida con la latencia de audio del sistema.

La latencia agregada de 20 ms está vinculada al búfer de audio (y aumentará si aumenta el búfer de audio)

Eso tiene sentido para Ableton Live, pero no tanto para la evaluación comparativa de latencia.

Pure Data hace algo similar. Hay un parámetro de "Retraso (ms)" en la configuración de audio. De hecho, afectará la latencia MIDI (muy engañoso). TBH, no sé si también afecta el audio.

Fin de la historia, fue el software de prueba el que tuvo la falla, y no el software que se estaba probando ni el sistema operativo :)