ICST Ambisonics Plugins · Motion Map v2.2
Quellenbewegungen gestaltenfür räumliches Komponieren in REAPER
Handbuch, Setup und kreative Techniken zum Positionieren, Animieren und Automatisieren von bis zu 64 Klangquellen im dreidimensionalen Raum.
Über Motion Mapping
Die ICST Motion-Mapping-Werkzeuge ermöglichen das Positionieren, Animieren und Steuern mehrerer Klangquellen im 3D-Raum. Sie unterstützen kompositorische Workflows ebenso wie Live-Performance und integrieren sich direkt in REAPER-Automation und OSC.
Abbilden & Animieren
Bis zu 64 Quellen mit präziser XYZ-Steuerung positionieren und bewegen.
Flexible Steuerung
REAPER-Automation, OSC-Vorschau, Presets und Zeitkurven kombinieren.
Kreative Workflows
Von festgelegter Komposition zu algorithmischen Trajektorien und Live-Performance.
In diesem Bereich
1. Voraussetzungen
Vor dem Start werden folgende Komponenten benötigt:
- REAPER v6 oder neuer
- ICST AmbiEncoder_64 auf dem Ziel-Track (siehe Installation)
- Python 3 installiert — nur für die Live-OSC-Vorschau erforderlich
- Beide Script-Dateien im selben Ordner:
JS_AmbiEncoder64_Motion_Map_GUI.luaundJS_Write_AmbiEncoder64_Spat_Motion_Automation.lua
2. Installation
Schritt 1 — Bundle herunterladen
Das ICST Ambi Motion Map Bundle herunterladen und entpacken. Beide Lua-Dateien in einem gemeinsamen Ordner belassen (z.B. im REAPER-Scripts-Verzeichnis).
Schritt 2 — Script in REAPER laden
In REAPER: Actions → Load ReaScript… → JS_AmbiEncoder64_Motion_Map_GUI.lua auswählen. Nur das GUI-Script muss geladen werden — es findet den Writer automatisch.
Der Writer JS_Write_AmbiEncoder64_Spat_Motion_Automation.lua muss im selben Ordner wie das GUI-Script liegen. Die beiden Dateien nicht trennen.
Schritt 3 — Aktion zuweisen (optional)
Im Actions-Fenster JS_AmbiEncoder64_Motion_Map_GUI suchen und einen Tastaturkürzel oder Toolbar-Button zuweisen.
Eine detailliertere Anleitung inkl. Python-OSC-Setup für macOS und Windows bietet die Motion Map Einrichtungsseite.
3. Erster Start
- In REAPER genau einen Track auswählen, der das ICST AmbiEncoder_64 FX enthält.
- Eine Time Selection (Loop-Range) im REAPER-Timeline setzen — sie definiert, wo die Automation geschrieben wird.
- Das GUI-Script aus dem Actions-Menü (oder per Tastenkürzel) starten. Das Motion Map Fenster öffnet sich.
„Bitte genau einen Track mit ICST AmbiEncoder_64 selektieren" — kein AmbiEncoder-Track ist ausgewählt. Den richtigen Track selektieren und das GUI neu starten.
„Bitte zuerst eine Loop/Time Selection setzen" — eine Loop-Range in der Timeline setzen, bevor auf Write geklickt wird.
4. Die Oberfläche auf einen Blick

Das Fenster gliedert sich in drei Bereiche:
Links — Source Grid: Zeilen für Sources S0–S63. Jede Zeile hat einen Aktivierungs-Toggle, ein Source-Label und 17 Bewegungsform-Zellen (Line bis Lis, inklusive Lat).
Rechts oben — Trajectory Preview: Animierte Leinwand, die den Pfad jeder aktiven Source zeigt. Die horizontale Achse ist X (links–rechts), die vertikale Y (unten–oben), beide in der aktuellen Scale-Einheit beschriftet. Die ausgewählte Source zeigt ein Koordinaten-Label (z.B. S0 X:-0.16 Y:-0.04).
Rechts unten — Settings: Steuerelemente für Scale, räumliche Parameter, Timing, Presets und Ausgabe-Optionen.
5. Sources aktivieren
Beim ersten Start sind alle 64 Sources aktiviert und haben automatisch zugewiesene Formen (Auto-Round-Robin). Es gibt drei Wege, eine Source ein- oder auszuschalten:
- Klick auf das ✓-Kästchen in der „On"-Spalte — schaltet die Source ein oder aus.
- Klick auf das Source-Label (z.B. S0, S1) — gleicher Effekt, aber größere Klickfläche.
- Shift+Klick auf ein Source-Label — aktiviert alle Sources von der aktuell ausgewählten bis zur angeklickten (Bereichsauswahl).
In der unteren Leiste stehen Schnellauswahl-Buttons: All Src, None Src, S0-7, S8-15 für schnelle Mehrfachauswahl.
Der Zähler oben rechts im Settings-Bereich zeigt, wie viele Sources aktiv sind (z.B. 3 / 64 active).
6. Bewegungsformen zuweisen
Jede Zeile hat 17 Form-Buttons. Klick auf einen Button weist diese Bewegungsform der Source zu. Das Zuweisen einer Form aktiviert die Source automatisch.
| Label | Form | Bewegungscharakter |
|---|---|---|
| Line | line | Linearer Sweep durch das Feld |
| Arc+ | arc_up | Bogen nach oben mit sanftem Easing |
| Arc− | arc_down | Bogen nach unten |
| S | s_curve | S-förmiger Sweep — sinusoidale Y-Bewegung |
| Step | step | Vier diskrete Positionsschritte |
| Zig | zigzag | Schnelles X/Y-Zickzack |
| Circ | circle | Vollkreis in der XY-Ebene |
| Spir | spiral | Expandierende Spirale von innen nach außen |
| Four | fourier_xyz | Komplexe 3D-Bahn aus summierten Harmonischen |
| Lat | lattice | Wiederholte XYZ-Offset-Struktur mit optionalem Gleiten und Begrenzung |
| Hrt | heart_curve | Herzförmige parametrische Kurve |
| Card | cardioid | Kardioid — eintropfige Herzkurve |
| R8 | rose8 | Rosenkurve mit 8 Blättern |
| Bern | bernoulli | Lemniskate von Bernoulli — Acht-Variante |
| Ast | astroid | Astroid — 4-spitzige Sternkurve |
| Epi | epicycloid | Epizykloide — komplexe Schleifenbahn |
| Lis | lissajous | Lissajous-Figur — X und Y auf verschiedenen Frequenzen |
Wenn mehrere Sources dieselbe Form verwenden, verteilt der Src offset-Schieberegler (siehe §7) sie entlang der Trajektorie — sonst bewegen sie sich alle überlagert am gleichen Punkt.
Lattice-Form
Lat ist eine kristallartige Wiederholungsbewegung. Statt eine einzelne kontinuierliche geometrische Kurve zu zeichnen, startet sie am aktuellen XYZ-Zentrum und addiert im Zeitverlauf immer wieder den XYZ-Spread-Vektor.
- Startpunkt:
X center,Y center,Z center - Wiederholter Offset:
X spread,Y spread,Z spread - Rate / T: wie viele Lattice-Updates innerhalb einer Time Selection passieren
- Slide: glättet den Übergang zwischen den Gitterpunkten, sodass die Bewegung gleitet statt hart zu springen
- Bound X/Y/Z: optionale Wrap-Grenzen um das Zentrum pro Achse;
0deaktiviert die Begrenzung
Diese Form eignet sich für kristalline Bewegung, stufenartige Tiefenbewegung, wiederholte Raumgitter und andere strukturierte Offsets, die sich vom Ursprung aus fortpflanzen.
Schnellzuweisung (PRESETS-Leiste unter dem Grid)
| Button | Effekt |
|---|---|
| Auto | Weist alle 17 Formen im Round-Robin auf alle 64 Sources zu |
| Random | Weist jeder Source eine zufällige Form zu |
| All Line | Setzt alle aktiven Sources auf Line |
| All Circle | Setzt alle aktiven Sources auf Circle |
| All Step | Setzt alle aktiven Sources auf Step |
| S0-7 Arc | Weist Arc+ den Sources 0–7 zu |
| S8-15 Circ | Weist Circle den Sources 8–15 zu |
| Clear All | Entfernt alle Formzuweisungen und deaktiviert alle Sources |
7. Räumliche Parameter
Koordinatensystem
Das GUI arbeitet im kartesischen XYZ-Raum (Einheitskugel −1..+1). Der Scale-Wert setzt einen Anzeige-Multiplikator, damit in Metern gedacht werden kann. Die REAPER-Automation wird immer in der nativen Einheitskugel geschrieben — Scale ändert nie das, was aufgezeichnet wird, nur wie Werte angezeigt werden und wie die OSC-Distanz gesendet wird.
- X = links–rechts (−1 = links, 0 = Mitte, +1 = rechts)
- Y = unten–oben (−1 = unter dem Hörer, 0 = Horizont, +1 = darüber)
- Z = Distanz (0 = nah, 1 = fern)
Steuerelemente
Alle Schieberegler sind ziehbar. Shift während des Ziehens halten für Feineinstellung. Klick auf das Wertefeld rechts ermöglicht direkte Zahleneingabe.
| Parameter | Standard | Beschreibung |
|---|---|---|
| Scale (m) | 1 | Raumgröße in Metern. Angezeigte Koordinaten sind in Scale-Einheiten (z.B. Scale 10 → Bereich −10..+10 m). REAPER-Automation und OSC arbeiten intern mit der Einheitskugel. Beliebigen Wert 1–1000 eingeben. |
| Steps/sec | 12 | Automationspunkte pro Sekunde. Höher = flüssiger, aber mehr Envelope-Daten. |
| Motion amount | 1.00 | Globaler Amplituden-Multiplikator. 1.0 = voller Bereich; 0.5 = halbe Amplitude; Werte über 1.0 dehnen über den definierten Spread hinaus und werden an der Kugelgrenze geclampt. |
| X center | 0.00 | Links–rechts-Zentrum des Bewegungsfeldes (−Scale..+Scale). |
| X spread | 2.00 | Gesamter links–rechts-Bereich (0..2×Scale). 2.0 bei Scale 1 = voller −1..+1-Sweep — der maximale Bereich, der in REAPER geschrieben werden kann. |
| Src offset | 0.00 | Zeitlicher Versatz zwischen Sources entlang der Trajektorie. 0 = alle Sources am gleichen Punkt; 1 = Sources gleichmäßig über den gesamten Pfad verteilt. Damit lassen sich Sources mit gleicher Bewegungsform trennen. |
| Y center | 0.00 | Vertikal-Zentrum (−Scale = unten, 0 = Horizont, +Scale = oben). |
| Y spread | 0.56 | Gesamter Vertikalbereich. |
| Z center | 0.75 | Distanz-Zentrum (0 = nah, Scale = fern). |
| Z spread | 0.35 | Distanz-Variationsbereich. |
Lattice-Steuerung
Diese Parameter erscheinen unter den Haupt-XYZ-Einstellungen und wirken nur auf Sources mit der Form Lat:
| Parameter | Standard | Beschreibung |
|---|---|---|
| Rate / T | 8.0 | Anzahl der Lattice-Updates über eine komplette Time Selection. 8 bedeutet, dass der Offset über die gewählte Dauer achtmal addiert wird. |
| Slide | 1.0 | Glättungsfaktor zwischen Lattice-Positionen. 0 erzeugt harte Sprünge; 1 interpoliert vollständig zwischen den Schritten; Zwischenwerte mischen beides. |
| Bound X / Y / Z | 0.00 | Optionale Wrap-Grenzen pro Achse um den Mittelpunkt. 0 deaktiviert die Begrenzung; positive Werte halten die wiederholte Transformation in einem endlichen Bereich. |
Quantize-Steuerung
Quantisierung kann auf jede Bewegungsform angewendet werden, nicht nur auf Lattice. Sie verwandelt kontinuierliche Bewegung in zeitlich, räumlich oder doppelt gestufte Bewegung.
| Parameter | Standard | Beschreibung |
|---|---|---|
| Time / T | 0.0 | Anzahl zeitlicher Rasterpunkte über eine Time Selection. 0 deaktiviert die Zeit-Quantisierung. Beispiel: 16 aktualisiert die Kurve an 16 gleichmäßig verteilten Zeitpunkten. |
| Q X / Q Y / Q Z | 0.00 | Räumliche Rundungsstufe pro Achse im normierten Raum. 0 deaktiviert die Rundung; 0.1 rundet die jeweilige Achse auf 0.1-Schritte. |
Das ist nützlich, wenn sich eine beliebige Form wie ein räumlicher Sequencer verhalten soll: Die Trajektorie wird in diskreten Zeiten abgetastet und/oder auf diskrete Positionen gerundet.
Reset-Button
⟲ Reset (neben Write) stellt alle räumlichen und Timing-Parameter auf ihre Standardwerte zurück, während Formzuweisungen und Presets erhalten bleiben.
Scale und OSC-Distanz
Wenn die OSC-Vorschau aktiv ist, wird der gesendete Distanzwert als Einheitskugel-Radius × Scale berechnet. Bei Scale 10 sendet eine Source am Rand der Kugel ~10 m an den AmbiEncoder.
8. Zeitkurve — Bewegungsrhythmus gestalten
Der Bereich Time Curve steuert, wie die Animation zeitlich verläuft. Drei Modi:
| Modus | Verhalten |
|---|---|
| Linear | Gleichmäßige Geschwindigkeit — konstantes Tempo (Standard). |
| Exp | Langsamer Start, schnelles Ende — die Bewegung beschleunigt. |
| Log | Schneller Start, langsames Ende — die Bewegung verlangsamt sich. |
Der n-Schieberegler (Exponent) legt die Stärke der Kurve fest. Bei n = 1 erzeugen alle drei Modi identische Ergebnisse. Typische Werte: 2.0–3.0.
Anwendungsfälle: Exp eignet sich für Sources, die abrupt „ankommen" sollen; Log ergibt einen ausholenden Einstieg, der sich setzt. Kombiniert mit Palindrome entstehen symmetrische Beschleunigungsprofile.
9. Palindrom-Modus
Wenn Palindrome aktiviert ist, spielt die Bewegung innerhalb derselben Time Selection vorwärts und dann rückwärts: die Form läuft 0 → 1 → 0 statt 0 → 1.
Das bedeutet:
- Die Source kehrt am Ende an ihre Ausgangsposition zurück.
- Ideal für oszillierende Bewegungen ohne harten Sprung.
- Funktioniert mit allen Bewegungsformen.
- Kombiniert mit Exp oder Log entstehen asymmetrische Vorwärts-/Rückwärtsgeschwindigkeiten.
10. Ausgabe-Optionen
| Option | Beschreibung |
|---|---|
| Clear existing | Löscht vorhandene Envelope-Punkte in der Time Selection vor dem Schreiben. Deaktivieren, um Bewegung auf vorhandene Automation zu schichten. |
| Track Latch | Setzt den Track nach dem Schreiben in den Latch-Automationsmodus, damit Live-Parameterbewegungen beim nächsten Playback aufgezeichnet werden. |
| Overwrite region | Wenn eine Region mit demselben Namen bereits existiert, wird sie zur aktuellen Time Selection verschoben statt einer neuen erstellt. |
| Use Z motion | Aktiviert die Distanz-(Z)-Variation. Deaktivieren, um Sources auf einer fixen Distanz zu halten, während X und Y sich weiterhin bewegen. |
Regionsname
Legt den Namen der REAPER-Render-Region fest. Standard: BFormat_TS. Regionen sinnvoll benennen — sie erscheinen im REAPER-Projekt und in Render-Exporten.
11. Preset-System
Die Preset-Leiste oben im Settings-Bereich ermöglicht das Speichern, Laden und Löschen vollständiger Parametersets.
Ein Preset speichert: alle Formzuweisungen, welche Sources aktiviert sind, Scale, alle XYZ-Parameter (Center und Spread für X, Y, Z), Src offset, Steps/sec, Motion amount, alle Lattice-Parameter, alle Quantize-Parameter, Zeitkurven-Modus und Exponent, Palindrome, Use Z motion sowie alle Ausgabe-Optionen.
Preset speichern
- Einen Namen im Preset-Textfeld eingeben (z.B.
Kreis_Weit). - Save klicken.
Preset laden
- Auf einen Preset-Chip (die Buttons unter dem Textfeld) klicken — sofortiges Laden.
- Oder Namen eintippen und Load klicken.
Preset löschen
Namen eintippen (oder Chip klicken) und Delete klicken.
Viele Presets navigieren
Mit den ◄ ►-Pfeilen durch mehr als 6 gespeicherte Presets blättern. Presets bleiben über REAPER-Sessions hinaus erhalten (via REAPER ExtState gespeichert).
12. Live-OSC-Vorschau
Der OSC-Preview-Bereich sendet Live-Positionsdaten an den AmbiEncoder, während die Animation im GUI läuft — so kann die Bewegung gehört werden, bevor sie als Automation festgeschrieben wird.
Einrichtung Schritt für Schritt
- In REAPER Preferences → Control/OSC/web die Option „Allow binding of REAPER action and FX parameters to OSC" aktivieren und den Port notieren (Standard:
9001). - Im GUI Host auf
127.0.0.1und Port entsprechend setzen. - Connect klicken. Der Status-Punkt wird grün, wenn der Python-Helfer läuft.
- Live Preview (sends AED to AmbiEncoder) aktivieren.
Das GUI sendet nun konvertierte OSC-Positionsmeldungen mit ~30 Hz für jede aktivierte Source über die Adresse:
/icst/ambi/sourceindex/aed <int index> <float azimuth> <float elevation> <float distance>
Beispiel — Source 3, 45° Azimut, −15° Elevation, 2,5 m Distanz:
/icst/ambi/sourceindex/aed 3 45.0 -15.0 2.5
Die OSC-Distanz wird in physikalischen Metern gesendet (Einheitskugel-Radius × Scale).
Disconnect klicken, um das OSC-Senden zu beenden.
Die Live-Vorschau erfordert Python 3 als python3 im System-PATH. Wenn der Status-Punkt rot bleibt, im Terminal python3 --version ausführen.
13. Automation schreiben
Wenn Sources eingerichtet und die Parameter in der Vorschau korrekt aussehen:
- Sicherstellen, dass der richtige REAPER-Track ausgewählt ist.
- Prüfen, dass die Time Selection den gewünschten Bereich abdeckt.
- ▶ Write Automation + Region klicken.
Das Script löscht vorhandene Envelope-Punkte (wenn Clear existing aktiv), schreibt XYZ-Automation für jede aktivierte Source direkt in der Einheitskugel (−1..+1) — unabhängig vom Scale-Anzeige-Wert — setzt den Track auf Latch-Modus (wenn Track Latch aktiv) und erstellt oder aktualisiert eine Render-Region.
Eine Statusmeldung am unteren Rand des GUIs bestätigt den Abschluss.
14. Trajektorien-Vorschau
Die Vorschauleinwand zeigt alle aktiven Sources gleichzeitig. Die horizontale Achse ist X (links–rechts), die vertikale Y (unten–oben), beide in der aktuellen Scale-Einheit beschriftet.
- Jede Source erhält eine eigene Farbe. Die ausgewählte Source hat einen pulsierenden Halo und ein Koordinaten-Label (z.B.
S0 X:-0.16 Y:-0.04bei Scale 1, oderS0 X:-1.6 Y:-0.4bei Scale 10). - Nicht ausgewählte Sources zeigen kleinere Punkte bei 80 % Deckkraft.
- Alle Punkte animieren gleichzeitig — die vollständige räumliche Szene ist live sichtbar.
- Pfade zeigen die vollständige Trajektorie jeder Source.
Auf ein Source-Label im Grid klicken, um es auszuwählen und seine Koordinaten in der Vorschau zu sehen.
15. Empfehlungen für die Praxis
- Voller links–rechts-Sweep: X center = 0, X spread = 2×Scale (z.B.
2.00bei Scale 1,20.00bei Scale 10). So wird der volle −1..+1-Bereich in die REAPER-Automation geschrieben. - Überlappende Sources trennen: Wenn zwei Sources dieselbe Form haben und ihre Pfade sich überlagern, Src offset auf 0.3–0.5 erhöhen, um sie entlang der Trajektorie zu verteilen.
- Scale als Raumgröße: Scale auf den tatsächlichen Raumradius setzen (z.B. 8 für einen 8-m-Raum). Die OSC-Vorschau sendet dann Distanzen in Metern — die REAPER-Automation bleibt unverändert.
- Mit Auto + 3–4 aktiven Sources starten, um die verfügbaren Formen kennenzulernen.
- Steps/sec 6–8 für breite Sweeps; 20–30 für detaillierte Bewegungen.
- Motion amount zunächst auf 1.0 — höhere Werte können an der Kugelgrenze geclampt werden.
- Clear existing deaktiviert: Circle auf bestehende Linien-Automation schichten.
- Palindrome + Log: schnell nach außen, sanft zurück — gut für reverbartige räumliche Ausklänge.
- Vor dem Experimentieren immer ein Preset speichern.
- Render-Regionen nach Szenen benennen:
Intro_BFormat,Strophe_BFormat,Outro_BFormat. - Lattice als räumliches Arpeggio: Rate/T = 8–16, Slide = 0 → harte Sprünge zwischen Positionen wie ein räumlicher Sequencer.
- Lattice mit Bounds: Bound X = 1.0, Bound Y = 0.5 → Sources bleiben in der Vorderhalbkugel, propagieren aber trotzdem weiter.
- Quantize für rhythmische Bewegung: Time/T = 16 auf einer Circle-Form → 16 diskrete Positionen statt glattem Orbit — synchron zum Takt wenn Steps/sec zum Tempo passt.
- Lat + Quantize kombinieren: Lattice definiert wohin die Sources springen; Quantize definiert wann — zusammen entstehen strukturierte, gitterbasierte Raumsequenzen.
16. Fehlerbehebung
Sources bewegen sich nach dem Schreiben nicht
Prüfen, ob mindestens eine Source ein ✓ in der „On"-Spalte und eine zugewiesene Form hat. Die Statusleiste zeigt, was geschrieben wurde.
Sources überlagern sich alle am gleichen Punkt
Src offset über 0 erhöhen (z.B. 0.5), damit Sources mit gleicher Bewegungsform zeitlich entlang des Pfades verteilt werden.
Automation entspricht nicht der Vorschau
Parameter-Änderungen nach der Vorschau, aber vor dem Schreiben beeinflussen die geschriebene Automation. Die Einstellungen vor dem Schreiben prüfen.
OSC-Vorschau — Punkt bleibt rot
- Python 3 prüfen:
python3 --versionim Terminal. - Port muss mit den REAPER-OSC-Einstellungen übereinstimmen.
- Disconnect → Connect neu klicken.
Writer-Script nicht gefunden
Beide Lua-Dateien müssen im selben Verzeichnis liegen. Bei Verschiebung erneut über Actions → Load ReaScript laden.
Steps/sec zu niedrig für kurze Regionen
Eine 0,1-Sekunden-Time-Selection bei 12 Steps/sec ergibt nur 1 Automationspunkt. Steps/sec erhöhen oder Time Selection verlängern.
Lattice-Sources gleiten statt zu springen
Slide auf 0 setzen. Bei Slide = 1 wird zwischen den Gitterpunkten interpoliert; bei Slide = 0 springt die Source sofort.
Lattice-Sources verlassen das Lautsprecherarray
Bound X / Y / Z aktivieren. Den gewünschten Normalisierungsradius eintragen (z.B. 0.8 hält Sources innerhalb von 80 % der Kugel). Bei Bound = 0 akkumuliert sich der Offset unbegrenzt.
Quantize zeigt keine sichtbare Wirkung
Time/T muss größer als 0 sein. Der Standardwert 0 deaktiviert die Zeit-Quantisierung. Auf die gewünschte Schrittanzahl setzen (z.B. 16) und sicherstellen, dass Steps/sec hoch genug ist, damit jedes Zeitfenster mindestens einen Automationspunkt enthält.
Siehe auch
- ICST Ambi Motion Markers — für musikalisch getaktete, cue-basierte Bewegungen
- ICST AmbiEncoder_64 — das Encoder-Plugin
- Installation — Plugin-Einrichtung
- Motion Map Einrichtung — Python-OSC-Setup für macOS und Windows