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

  1. Edit → Preferences → Control Surfaces
  2. Check Open Sound Control → click Show Protocol Settings
  3. Set:
    • Enabled: on
    • Listen port: 3819
    • Reply port: 3820
    • Reply: “To Sender”
    • Feedback: Track/Bus Strip Feedback and Master Strip Feedback both on
  4. 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:

  1. Edit → Preferences → Control Surfaces → Websockets Server
  2. Check Enabled
  3. Port: 3818
  4. 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)