OSC Integration (Ardour)
shiloh-mixer integrates with Ardour via two interfaces:
| Interface | Direction | Port | Purpose |
|---|---|---|---|
| Ardour OSC | mixer → Ardour | UDP 3819 | Transport: play, stop, record, markers |
| Ardour OSC feedback | Ardour → mixer | UDP 3820 | Fader and mute state sync |
| Ardour WebSocket | mixer → Ardour | WS 3818 | Strip fader/mute (preferred path) |
One-time Ardour setup
Enable the OSC control surface
- Edit → Preferences → Control Surfaces
- Check Open Sound Control → click Show Protocol Settings
- Set:
- Enabled: on
- Listen port:
3819 - Reply port:
3820 - Reply: “To Sender”
- Feedback: Track/Bus Strip Feedback and Master Strip Feedback both on
- Click Apply
Ardour starts listening on UDP 3819 immediately.
Enable the WebSocket surface (optional, for fader control)
Ardour’s experimental WebSocket control surface exposes fader and mute with better precision than OSC fader messages. If your build of Ardour includes it:
- Edit → Preferences → Control Surfaces → Websockets Server
- Check Enabled
- Port:
3818 - Click Apply
shiloh-mixer connects to ws://127.0.0.1:3818/ at startup and uses it for strip fader/mute if available, falling back to OSC if not.
Install or update the Ardour session template
The template is generated dynamically from the running mixer config. It reflects the current channel layout — re-run after any channel changes.
mkdir -p ~/.config/ardour8/templates/shiloh-broadcast
curl http://localhost:8889/ardour/template \
-o ~/.config/ardour8/templates/shiloh-broadcast/shiloh-broadcast.template
To create a new session from the template: Session → New Session → From Template → shiloh-broadcast.
Channel → Ardour strip mapping
The [ardour.track_map] block in shiloh-mixer.toml maps mixer channel IDs to Ardour strip numbers (1-based, matching the Ardour mixer strip order):
[ardour.track_map]
mic_l = 1
mic_r = 2
desktop = 3
mopidy = 4
After reordering Ardour tracks, update this map and restart the mixer.
What shiloh-mixer controls in Ardour
Via OSC (always):
| Mixer action | Ardour OSC command |
|---|---|
| MIDI transport: play | /transport_play |
| MIDI transport: stop | /transport_stop |
| MIDI transport: record | /rec_enable_toggle |
| MIDI: goto start | /goto_start |
| MIDI: goto end | /goto_end |
| MIDI: prev marker | /jump_backwards_to_mark |
| MIDI: next marker | /jump_forward_to_mark |
| MIDI: add marker | /add_location_from_playhead |
Via WebSocket (if enabled):
| Mixer action | Ardour effect |
|---|---|
| Fader move on any mapped channel | Ardour strip gain changes |
| Mute toggle on any mapped channel | Ardour strip mute changes |
Ardour → mixer feedback
When Ardour sends fader changes (e.g. from mouse or MIDI in Ardour), the OSC feedback arrives on UDP 3820. mixer_web’s ArdourOsc.Feedback GenServer receives these and updates the ardour_gains assigns in the LiveView state — the fader positions in the web UI track Ardour.
This feedback loop is one-way at the moment: Ardour → UI display. It does not drive actual mixer gains (the mix bus ignores Ardour feedback), so the Ardour faders act as a visual indicator of what Ardour is doing, not as input to the mix bus.
Configuring Ardour as an OSC controller target (custom)
If you want to send custom OSC from a different controller (not shiloh-mixer) to Ardour, any OSC client that can send to UDP 3819 works. The full Ardour OSC namespace is documented at ardour.org/osc.html.
Example — send play from the command line:
oscsend localhost 3819 /transport_play
(requires oscsend from the liblo-tools package)