ICST Ambisonics Workshop 2026
Betriebsanleitung – Scenen Wechsler

v1.0 · Mai 2026
0 %
Signalfluss
DAW
REAPER
Marker / Playback
OSC UDP
:50010
Max/MSP
ACT_Circle_Mover
p Scene_Mover
OSC UDP
:50001–08
Plugin (VST3/AU)
AmbiEncoder
ICST · 8 Instanzen
Audio
Ambisonics
Lautsprecher
Speaker Array
Decoder
0
Einmaliges Setup SETUP
Einmalig pro Rechner / Session. Danach nicht mehr nötig.
0.1
ACT_Circle_Mover_Main.app starten
Im Bundle-Ordner die App doppelklicken.
⚠ macOS zeigt Netzwerk-Dialog → «Erlauben» klicken (notwendig für UDP-Empfang).
✓ Warten bis in der Max Console erscheint:
udpreceiver binding to port 50010
0.2
REAPER öffnen
REAPER starten und das Workshop-Projekt laden (oder neues Projekt anlegen).
Das REAPER-Projekt muss ICST AmbiEncoder VST3/AU-Instanzen auf den Audio-Tracks enthalten.
0.3
ICST_Trigger_Scenes.lua laden
In REAPER:
  • Actions → Show Action List (oder ?-Taste)
  • New action → Load ReaScript…
  • Datei wählen: ICST_Trigger_Scenes.lua
  • Skript erscheint jetzt in der Action List – noch nicht ausführen
0.4
ICST_Store_Current_Marker_Scene.lua laden
Gleicher Weg wie 0.3 – aber diese Datei:
  • New action → Load ReaScript…
  • Datei wählen: ICST_Store_Current_Marker_Scene.lua
💡 Beide Scripts einem Toolbar-Button oder Keyboard-Shortcut zuweisen (Rechtsklick in Action List → Add button to toolbar)
0.5
OSC-Verbindung testen
Kurz-Test ohne Playback:
  • In Max-Fenster die p Scene_Mover öffnen (Doppelklick auf Subpatcher)
  • Einen der Scene-Buttons (1–6) manuell klicken
  • ambimonitor-Anzeige reagiert → Verbindung OK
Reagiert nichts: → Troubleshooting Abschnitt weiter unten
A
Workflow A – Scene speichern VOR DEM KONZERT
Ambisonics-Positionen definieren und pro Marker als Scene ablegen.
A.1
Marker an gewünschten Positionen setzen (REAPER)
Jeden Abschnitt / jede Klangszene als REAPER-Marker markieren:
  • Cursor an die gewünschte Zeitposition setzen
  • Shift+M → Marker hinzufügen (Name vergeben, z. B. Scene_1)
  • Gleiche Schritte für alle weiteren Szenen wiederholen
Der Marker-Name wird als Scene-Bezeichnung in Max verwendet.
A.2
Ambisonics-Position für Scene_1 einstellen (Max)
In ACT_Circle_Mover_Main → p Scene_Mover:
  • Den ambimonitor öffnen (Doppelklick)
  • Klangquelle(n) auf die gewünschte Position ziehen
  • Position wird sofort an AmbiEncoder weitergegeben (OSC → Port 50001–50008)
A.3
Cursor auf Marker setzen (REAPER)
REAPER Edit-Cursor exakt auf den entsprechenden Marker setzen:
  • Marker im Arrange-Bereich anklicken, oder
  • Ctrl+G / Cmd+G → «Go to marker number»
A.4
Scene speichern – Store-Script ausführen
ICST_Store_Current_Marker_Scene-Action in REAPER aufrufen:
  • Action List → Script suchen → Run, oder
  • Toolbar-Button / Shortcut drücken (falls in 0.4 zugewiesen)
Das Script sendet /act/scene/store «Scene_1» → Max speichert die aktuelle ambimonitor-Position als «Scene_1».
A.5
Speicherung in Max Console bestätigen
In der Max Console (Extras → Console) erscheint:
scene stored: Scene_1
Erscheint keine Meldung → OSC-Verbindung prüfen (Troubleshooting unten)
A.6
Für alle weiteren Scenes wiederholen (A.2 – A.5)
Schritte A.2–A.5 für jede Szene (Scene_2, Scene_3, …) wiederholen.
🔁 Schleife: A.2 → A.3 → A.4 → A.5 → nächste Scene
A.7
Scenes in snapshots.xml speichern (Max)
Alle gespeicherten Scenes persistent sichern:
  • In ACT_Circle_Mover: write-Button klicken
  • Speicherpfad wählen / bestätigen → snapshots.xml
💡 Beim nächsten App-Start mit read wieder laden.
B
Workflow B – Playback / Performance KONZERT
Automatischer Scene-Wechsel synchron zum REAPER-Playback.
B.1
Trigger-Script starten (Dauerschleife)
ICST_Trigger_Scenes-Action in REAPER aufrufen:
  • Action List → Script suchen → Run
  • Das Script läuft als kontinuierlicher Loop – es überwacht permanent Marker und Playback-Status
Erkennbar: In der REAPER-Titelleiste oder Console erscheint Aktivitäts-Meldung. Das Script läuft bis es manuell gestoppt wird.
B.2
Cursor an den Startpunkt setzen
Cursor auf den ersten Marker oder gewünschten Startpunkt in REAPER setzen.
B.3
Playback starten (Spacebar / Transport Play)
REAPER-Playback starten.
Das Trigger-Script erkennt den Play-Status und sendet bei jedem Marker automatisch:
/act/scene/target «Scene_Name» – Ziel-Scene
/act/scene/interval i f i f i – von/bis Position + Dauer in ms
💡 Max interpoliert die ambimonitor-Position sanft mit live.line – kein harter Sprung.
B.4
Scene-Übergänge in Max beobachten (optional)
In ACT_Circle_Mover → p Scene_Mover:
  • Das umenu zeigt die aktuelle Ziel-Scene
  • Der ambimonitor bewegt sich zur Ziel-Position
  • Scene-Buttons (1–6) leuchten bei aktivem Scene auf
B.5
Playback stoppen / Trigger-Script beenden
Nach dem Konzert:
  • REAPER Stop (Space)
  • Trigger-Script stoppen: Action List → Script → Run (togglet Dauerschleife aus)
C
Workflow C – Schnelltest / Marker-Klick SOUNDCHECK
Einzelne Scenes manuell anspringen ohne laufendes Playback.
C.1
Trigger-Script läuft (aus Workflow B)
Das Trigger-Script muss aktiv sein (wie in B.1 gestartet). Playback kann gestoppt sein.
C.2
Cursor auf gewünschten Marker klicken
Im Arrange-Bereich direkt auf einen Marker-Pfeil klicken.
Das Trigger-Script erkennt den Klick und sendet sofort:
/act/scene/target «Scene_Name»
C.3
Reaktion in Max prüfen
  • ambimonitor bewegt sich zur gespeicherten Position der angeklickten Scene
  • AmbiEncoder empfängt neue XYZ-Koordinaten (OSC an Ports 50001–50008)
💡 Ideal für Soundcheck: jede Scene kurz antriggern und Lautsprecher-Ortung prüfen.
OSC Quick Reference
OSC-Adresse Argumente Bedeutung Von
/act/scene/target s scene_name Ziel-Scene setzen (sofort oder interpoliert) REAPER → Max
/act/scene/interval i f i f i
m1_idx · m1_pos · m2_idx · m2_pos · diff_ms
Interpolations-Intervall: von Marker m1 zu m2, Dauer diff_ms REAPER → Max
/act/scene/store s scene_name Aktuelle ambimonitor-Position als scene_name speichern REAPER → Max
/act/scene/setduration i ms Überblend-Dauer manuell setzen REAPER → Max
/act/scene/start i f s
marker_idx · playpos · scene_name
Playback-Start mit Scene-Angabe REAPER → Max
(XYZ-Koordinaten) ambimonitor-intern Positionen an AmbiEncoder-Instanzen senden Max → AmbiEncoder
Port 50001–50008
Troubleshooting
🔇 Keine Reaktion in Max – ambimonitor bewegt sich nicht
Mögliche Ursache
OSC-Pakete kommen nicht an Port 50010
Lösung
1. Max Console prüfen: udpreceiver binding to port 50010 vorhanden?
2. Wenn nicht: App neu starten, Netzwerk-Dialog → «Erlauben»
3. Terminal: lsof -i UDP:50010 → ACT_Circle_Mover muss erscheinen
🧩 ACT_Circle_Mover_Main.app öffnet nicht / startet nicht
Mögliche Ursache
macOS Gatekeeper blockiert unbekannte App
Lösung
Rechtsklick auf .app → «Öffnen» (nicht Doppelklick).
Einmalig bestätigen. Danach normaler Start.
🐍 REAPER Script-Fehler: «python3 not found» oder helper.py schlägt fehl
Mögliche Ursache
Python 3 nicht unter Standard-Pfaden (/opt/homebrew/bin/python3, /usr/local/bin/python3, /usr/bin/python3) gefunden
Lösung
Terminal: bash test_python3.sh ausführen
Falls fehlgeschlagen: bash install_python3.sh
🔊 AmbiEncoder Plugin reagiert nicht auf Positions-Änderungen
Mögliche Ursache
OSC-Empfang im AmbiEncoder nicht aktiviert, oder falscher Port
Lösung
Im AmbiEncoder-Plugin: OSC Receive aktivieren, Port auf 50001–50008 (je Instanz) setzen.
Prüfen: lsof -i UDP:50001
📁 «scene stored» erscheint nicht in Max Console nach Store-Script
Mögliche Ursache
Cursor sitzt nicht auf einem benannten Marker; oder Script-Datei nicht korrekt geladen
Lösung
1. REAPER Marker List öffnen (Shift+Ctrl+M) → Marker mit Namen vorhanden?
2. Cursor exakt auf Marker-Position? → Ctrl/Cmd+G nutzen
3. Script neu laden (Schritt 0.4 wiederholen)
Scene-Übergang zu abrupt / kein Fade
Mögliche Ursache
Marker liegen zu dicht zusammen (diff_ms ≈ 0), oder live.line bekommt keinen Interval-Parameter
Lösung
Mindestabstand zwischen Markern: ≥ 500 ms empfohlen.
Alternativ manuell via OSC: /act/scene/setduration 2000 (= 2 Sekunden Fade)