EN

← manuelwelsch.de

Latenz- und jitterarme MIDI/OSC-Übertragung von Ableton Live zur iPad-App

Bachelorarbeit, B.Sc. Medieninformatik, Hochschule Düsseldorf, August 2023

Originaltitel: Entwicklung und Anwendung einer Testapplikation zur Untersuchung der latenz- und jitterarmen Übertragung von Steuersignalen (MIDI / OSC) von Ableton Live zu einer iPad App

Zusammenfassung

Ein iPad-Controller für Ableton Live taugt auf der Bühne nur, wenn die Verbindung schnell und stabil ist. Mehr als 10 ms zwischen Berührung und Klang sind bereits spürbar, und visuelles Feedback auf dem iPad sollte innerhalb von 30 ms ankommen. Spezielle Werkzeuge, um das zu messen, gab es nicht. Also habe ich ein Testsystem gebaut und die Verbindung damit Schritt für Schritt optimiert.

Das System bestand aus drei Teilen: einer iPad-App mit Testszenarien, etwa 8 Reglern, die per Multitouch gleichzeitig gedreht werden; einer Mac-App, die jede Nachricht zwischen iPad und Ableton Live weiterleitete und Latenz und Jitter jeder Verbindung in einem Live-Dashboard anzeigte; und einem Python MIDI Remote Script in Ableton Live.

Mit jeder gemessenen Änderung sank die mediane Eingabelatenz vom iPad zu Ableton Live von 27,8 ms auf 4,98 ms. Zusammen mit einer typischen Audio-Interface-Latenz von 4 ms ergibt das 8,98 ms von der Berührung bis zum Klang, innerhalb des Ziels von 10 ms. Der visuelle Round Trip lag bei 9,97 ms, deutlich unter 30 ms.

Die wiederverwendbaren Teile (Netzwerk, Latenzmessung und Bedienelemente) flossen in ein Swift Package für künftige Controller-Apps.

Ergebnisse

Mediane Eingabelatenz, iPad zu Ableton Live
27,8 → 4,98 ms
Berührung bis Klang, mit 4 ms Audiolatenz
8,98 ms
Ziel: unter 10 ms
Visueller Round Trip
9,97 ms
Ziel: unter 30 ms
Mediane Eingabelatenz nach jedem Schritt
  1. Run-Loop-Puls. Abletons Remote Scripts verarbeiteten eingehende OSC-Nachrichten nur in einer Run Loop, die etwa alle 100 ms lief. Das verursachte den größten Teil der Verzögerung und das Sägezahnmuster unten. Selbst ein Listener auf die Song-Position kam nur auf 80 ms herunter. Remote Scripts bevorzugen MIDI, also schickte die Mac-App alle 0,1 ms eine MIDI-CC-Nachricht als Puls, und jeder Puls brachte das Script dazu, seine OSC-Warteschlange abzuarbeiten. Die Run Loop sank von etwa 100 ms auf unter 1 ms.
  2. OSC-Bundles. Schnelle Reglerbewegungen erzeugten Schübe von Nachrichten, die offenbar an eine Grenze von Paketen pro Sekunde stießen und als Wellen in der Latenz sichtbar wurden. Mehrere OSC-Nachrichten in ein Bundle zu packen, senkte die Zahl der Pakete und beseitigte die Wellen.
  3. 128 Schritte pro Umdrehung. Der Touchscreen des iPads lieferte weit mehr Werte, als irgendjemand hören kann. Jeden Regler auf 128 Schritte pro Umdrehung zu quantisieren, die Auflösung eines MIDI-CC, bedeutete weniger Nachrichten.
Jedes Paket, vorher und nachher
  • Mac zu Ableton Live
  • iPad zu Mac

Vorher: ohne Optimierung, Median 27,8 ms

50 ms 25 0

Nachher: alle drei Schritte, Median 4,98 ms

50 ms 25 0

Eingabelatenz von 50 aufeinanderfolgenden Paketen, während 8 Regler gleichzeitig gedreht werden. Beide Diagramme haben dieselbe Skala.

Daten anzeigen
PaketVorher (ms)Nachher (ms)
Mac zu AbletoniPad zu MacMac zu AbletoniPad zu Mac
13,532,276,042,86
20,412,032,261,41
30,481,941,531,82
40,571,861,561,51
540,111,363,211,75
640,372,484,550,80
740,792,110,621,08
837,701,691,8512,16
938,424,630,991,98
1034,304,681,451,82
1134,374,593,211,81
1231,583,292,342,44
1331,872,990,951,31
1428,212,633,801,07
1528,412,420,981,48
1623,543,154,361,52
1723,852,830,912,15
1823,882,815,283,12
1920,831,773,731,15
2020,982,244,651,17
2116,992,111,121,36
2217,252,257,112,48
2313,411,948,563,55
249,511,586,051,36
259,932,673,121,61
265,712,783,831,73
272,302,334,261,80
2839,212,588,992,96
2936,554,469,442,53
3032,614,562,211,00
3128,744,274,971,04
3229,193,815,291,56
3325,573,281,980,91
3421,693,960,951,07
3522,233,442,642,36
3618,283,019,901,49
3710,413,3510,071,34
3810,383,396,412,00
398,041,663,511,35
401,933,633,401,32
4143,934,824,891,53
4245,504,191,371,43
4342,443,502,391,01
4438,613,349,990,92
4534,643,183,701,00
4630,932,765,731,36
4731,092,499,211,00
4827,072,511,791,46
4922,822,974,133,19
5018,882,400,961,20

Wahl des Übertragungswegs

Bevor ich irgendetwas optimiert habe, habe ich im Testsystem verschiedene Wege verglichen, iPad und Mac zu verbinden: