Table of Contents
1. Introduction
A&H MIDI Bridge is a third-party macOS application that enables simultaneous MIDI control of multiple Allen & Heath digital mixing consoles over a network connection.
The official Allen & Heath MIDI Control driver supports only one mixer at a time. For live sound engineers running dual-console setups — such as a dLive at Front of House and another at Monitors — this limitation makes it impossible to control both mixers from a single DAW or show control system like QLab.
A&H MIDI Bridge solves this by creating independent virtual CoreMIDI ports for each mixer, each with its own TCP/TLS network connection. Your DAW sees them as separate MIDI devices that you can assign independently.
2. Features
Multiple Mixers
Connect to two or more Allen & Heath mixers simultaneously from one Mac.
Four Protocols
MIDI Thru, HUI, Mackie Control, and CC Translator — run multiple per mixer.
Virtual MIDI Ports
Creates CoreMIDI ports visible in QLab, Logic Pro, Reaper, and any MIDI-capable app.
Background Service
Runs silently in the menu bar. Close the window — connections stay alive.
Configurations & Templates
Save per-band or per-production setups, or start from ready-made QLab and DAW templates.
TLS Encryption
Secure connections to dLive and AHM consoles using TLS, just like the official driver.
MIDI Monitor
Built-in real-time MIDI message viewer with A&H protocol decoding. No external tools needed.
OSC Bridge (Bidirectional)
Built-in OSC server with real-time feedback. Works with Companion, TouchOSC, QLab, and custom scripts.
Stream Deck Ready
WebSocket API for Elgato Stream Deck via Bitfocus Companion. Scene recall, mute groups, DCA, HPF, EQ, preamp, channel names, send levels.
Full SysEx Support
Channel names, colours, send levels, preamp parameters — all SysEx messages flow through.
Auto-Connect
Reconnects to the last configuration on launch. Per-bridge connect/disconnect control.
Supported Mixer Types
| Mixer | Connection | Port |
|---|---|---|
| dLive MixRack | TLS | 51325 |
| dLive Surface | TLS | 51325 |
| AHM-64 / AHM-32 | TLS | 51325 |
| SQ-5 / SQ-6 / SQ-7 | TCP | 51325 |
| GLD / GLD-80 | TCP | 51325 |
| Avantis | TLS | 51325 |
3. Dashboard
The main window has two tabs: Bridges (configuration and status) and MIDI Monitor (real-time message viewer). The Bridges tab shows three sections:
Header
The top bar shows the Allen & Heath logo, "MIDI BRIDGE" title, and the active configuration name with a connection indicator. A settings gear icon opens the preferences window.
Configuration Cards
All saved configurations appear as cards in a grid. Each card shows the configuration name, a list of mixers with their IP addresses, and a Connect / Disconnect button. A "New Configuration" card with a dashed border allows creating new setups.
Status Section
When a configuration is active, a detailed status section appears below the cards. It shows each mixer with its protocols, connection state (Connecting / Connected / Error / Disconnected), and the virtual MIDI port names that are visible in your DAW.
4. Configurations
A configuration represents a complete mixer setup — for example, "Band X Tour 2026" or "Theatre Production". Each configuration contains one or more mixer entries with their network addresses and protocol settings.
Creating a Configuration
~/.ah-midi-bridge/configs/ as JSON files. They persist across app restarts.
5. Templates & QLab Quick Setup
A&H MIDI Bridge includes ready-made templates for common setups. Templates appear on the empty state screen and create a pre-configured mixer entry with the right protocols and MIDI port names.
Available Templates
| Template | Protocols | Use Case |
|---|---|---|
| QLab Scene Recall | MIDI Thru | Simple scene recall from QLab using Program Change |
| QLab Full Control | MIDI Thru CC Translator | Scene recall + fader automation + mutes from QLab |
| FOH + Monitor | MIDI Thru | Dual dLive setup with separate QLab control per mixer |
| DAW Transport | HUI | Transport control for Logic Pro / Pro Tools |
QLab Scene Recall — Quick Reference
After creating a configuration from the "QLab Scene Recall" template:
Scene Number Mapping
| Scenes | Bank (CC 0) | Program Change |
|---|---|---|
| 1 – 128 | 0 | 0 – 127 |
| 129 – 256 | 1 | 0 – 127 |
| 257 – 384 | 2 | 0 – 127 |
| 385 – 500 | 3 | 0 – 115 |
QLab Fader & Mute Control
Use the "QLab Full Control" template. The CC Translator port accepts:
Mutes (Note On messages)
- Note On with velocity > 64 (0x40) = Mute ON
- Note On with velocity < 64 = Mute OFF
- MIDI channel selects the channel type (see Channel Selection below)
- Note number selects the channel number
Fader Levels (NRPN via CC sequence)
Send three CC messages in sequence:
CC 99(NRPN MSB) = channel number (0-indexed)CC 98(NRPN LSB) =23(0x17 = Fader Level parameter)CC 6(Data Entry) = level (0 = -inf, 107 = 0dB, 127 = +10dB)
Channel Type by MIDI Channel Offset
| MIDI Channel | Channel Type |
|---|---|
| Base (N) | Inputs 1 – 128 |
| N + 1 | Groups |
| N + 2 | Aux / FX Sends |
| N + 3 | Matrix |
| N + 4 | FX Return, Mains, DCA, Mute Groups |
6. Adding Mixers
Each mixer entry requires:
| Field | Description | Example |
|---|---|---|
| Name | A friendly label for this mixer | FOH dLive |
| Type | The mixer model (determines TLS and protocols) | dLive MixRack |
| IP Address | The mixer's network address | 192.168.1.207 |
| Port | TCP port number (default 51325) | 51325 |
Manual Entry
In the "Add Mixer" dialog, fill in the name, IP address, and select the mixer type from the dropdown. The port defaults to 51325. Click "Add Mixer" to add it to the configuration.
Network Discovery
Click "Scan" to search for Allen & Heath mixers on the local network. Discovered mixers appear in a list — click one to add it with pre-filled details.
7. Protocols
Each mixer can run one or more protocols simultaneously. Each enabled protocol creates a separate virtual MIDI port.
| Protocol | Description | Use Case |
|---|---|---|
| MIDI Thru | Raw MIDI passthrough — all messages forwarded as-is | QLab scene recall, custom MIDI control |
| HUI | Mackie HUI protocol for DAW control surfaces | Pro Tools fader control |
| Mackie Control | Mackie Control Universal protocol | Logic Pro, Reaper, Ableton fader control |
| CC Translator | Translates Control Change messages using A&H mapping rules | Custom controller mapping |
Port Names
Each protocol generates a virtual MIDI port name automatically: [Mixer Name] [Protocol]. For example, a mixer named "FOH" with MIDI Thru creates a port called FOH MIDI Thru.
You can customize port names in the configuration editor. This is useful when you want specific names visible in your DAW — e.g., "Stage Left Sends" instead of "MON MIDI Thru".
8. Connecting & Disconnecting
Connect
Click the Connect button on a configuration card. A&H MIDI Bridge will:
- Create virtual CoreMIDI ports for each enabled protocol
- Establish TCP/TLS connections to each mixer
- Begin forwarding MIDI data between ports and mixers
The button turns red and changes to Disconnect as soon as connections are initiated. Status indicators show the connection state for each protocol:
| Indicator | State | Meaning |
|---|---|---|
| ● | Connecting | TCP/TLS handshake in progress |
| ● | Connected | Active, passing MIDI data |
| ● | Error | Connection failed or dropped |
| ● | Disconnected | Not connected (ports still visible) |
Disconnect
Click Disconnect to close the TCP connections to the mixers. The virtual MIDI ports remain visible in your DAW — only the network connections are closed. This means:
- Your DAW routing is preserved
- You can reconnect without reconfiguring port assignments
- No MIDI data flows while disconnected
Per-Bridge Control
In multi-mixer setups, each protocol row in the status section has its own play/stop button. This allows you to connect or disconnect a single bridge without affecting others — for example, reconnecting your FOH mixer without interrupting the monitor link.
Auto-Connect on Launch
Enable Auto-connect on launch in Settings to automatically activate the last-used configuration when the app starts. This is ideal for touring rigs where the app should "just work" after a reboot.
9. MIDI Monitor
The MIDI Monitor tab shows all MIDI messages flowing through the bridge in real time. Every message is decoded using Allen & Heath's MIDI protocol, so you see human-readable labels instead of raw hex.
Monitor Columns
| Column | Description |
|---|---|
| Time | Timestamp (HH:MM:SS.ms) |
| Direction | IN = Mixer → DAW, OUT = DAW → Mixer |
| Bridge | Which mixer/protocol bridge handled the message |
| Decoded | Human-readable: "Mute ON ch1 note 5", "Scene Recall 42", "Fader Level" |
| Raw | Hex bytes of the original MIDI message |
Filtering
- Bridge filter — Show messages from a specific mixer only
- Direction filter — Show only IN, only OUT, or both
- Pause — Freeze the display to examine messages without scrolling
- Clear — Empty the message log
Decoded Message Types
The monitor recognizes and decodes:
- Mute ON/OFF — Note On with velocity threshold
- Scene Recall — Program Change with scene number
- Fader Level — NRPN parameter 0x17
- PEQ, HPF — NRPN parameters for EQ bands and high-pass filter
- DCA/Mute Group Assign — NRPN parameter 0x40
- Channel Name/Colour — A&H SysEx commands
- Send Levels — A&H SysEx send level messages
- Preamp Gain/Pad/48V — Pitchbend and SysEx
- MMC Transport — Play, Stop, Record, Rewind, FF
- UFX Global Key/Scale — CC 12/13
10. Timecode Scene Recall
The Timecode tab lets you trigger scene recalls, key signatures, and other MIDI commands automatically from SMPTE timecode. No need for QLab or other show control software — connect an LTC audio signal or MTC MIDI source and the app fires cues at the right moment.
Timecode Sources
Select a timecode source in the Source selector:
| Source | How it works |
|---|---|
| LTC Audio | Receives a SMPTE LTC audio signal from any audio input device. Frame rate is detected automatically (24, 25, 29.97df, 30 fps). Select the audio device and input channel from the dropdown. |
| MTC MIDI | Receives MIDI Time Code Quarter Frame messages from a CoreMIDI source (DAW, hardware timecode generator). Select the MIDI source from the dropdown. |
The selected source and audio device are saved and restored on next launch. If the audio device is disconnected when the app starts, it will reconnect automatically when the device reappears (hot-plug).
Cue Databases
Cues are organized into databases. Each database is a folder containing songs/cues with timecoded triggers. Use databases to separate different shows, artists, venues, or events.
Editing Songs & Cues
Each song/cue has one or more trigger points (timecodes). At each trigger point, you choose which mixers receive commands and what those commands are:
| Field | Description |
|---|---|
| Timecode | HH:MM:SS:FF — type numbers directly into the timecode field, cursor advances automatically |
| Mixer toggles | Enable/disable each mixer for this trigger point. Only enabled mixers receive commands. |
| Actions per mixer | Click + Add next to a mixer to pick an action: Scene Recall (1–500), Key Signature, Fader Level, Mute, DCA, EQ, Preamp, Send Level, or Raw MIDI. |
If a song has multiple sections (e.g. Intro, Verse, Chorus), click Add Another Section to add more trigger points within the same song.
Mixer Targets
The Mixer Targets section shows all mixers from the active configuration. Toggle each mixer on/off to control which ones receive timecode triggers:
- No mixers armed = no triggers are sent (safe default)
- Toggle a mixer on = it receives timecode-triggered commands
- The selection is saved and can be suggested on next session via Restore previous
- If another instance on the network has locked a mixer, it shows a lock icon and cannot be armed locally
Arming & Running
The Cue History shows every fired trigger with timestamp, song/section name, action, target mixer, and success/failure status.
Peer Network
When multiple machines run A&H MIDI Bridge on the same network, they discover each other automatically via Bonjour. If one machine arms a mixer for timecode, other machines see a lock icon on that mixer and cannot send conflicting scene recalls to it.
Auto-Connect
In Settings > General, enable auto-connect options to restore your full session on launch:
- Auto-connect on launch — connects the selected configuration
- Arm timecode automatically — restores the TC source, audio device, and armed mixers
- Restore cue database — reopens the selected cue database
11. OSC Bridge
A&H MIDI Bridge includes a built-in OSC (Open Sound Control) server that translates OSC messages into Allen & Heath MIDI commands. This allows tools like Bitfocus Companion (Stream Deck), TouchOSC, QLab (via OSC cues), and custom scripts to control A&H mixers without MIDI routing.
Enabling OSC
The OSC server starts automatically and accepts UDP messages on the configured port. A green indicator in Settings confirms it's running.
OSC Address Reference
Channel Control
| Address | Type | Range | Action |
|---|---|---|---|
/ch/{n}/fader | float | 0.0 – 1.0 | Set fader level (-inf to +10dB) |
/ch/{n}/mute | int | 0 or 1 | Mute on/off |
/ch/{n}/name | string | ASCII text | Set channel name |
/ch/{n}/color | int | 0 – 7 | Set channel colour |
/ch/{n}/hpf/freq | float | 20 – 20000 | HPF frequency in Hz |
/ch/{n}/hpf/on | int | 0 or 1 | HPF on/off |
Parametric EQ
| Address | Type | Range | Action |
|---|---|---|---|
/ch/{n}/eq/{band}/type | int | 0 – 4 | Bell, LF Shelf, HF Shelf, LPass, HPass |
/ch/{n}/eq/{band}/freq | float | 20 – 20000 | Frequency in Hz |
/ch/{n}/eq/{band}/gain | float | -15 – +15 | Gain in dB |
/ch/{n}/eq/{band}/width | float | 0.0 – 1.0 | Q width (mapped to 0–24) |
Bands are numbered 0 – 3.
Scene Control
| Address | Type | Range | Action |
|---|---|---|---|
/scene/recall | int | 1 – 500 | Recall scene by number |
Send Levels
| Address | Type | Range | Action |
|---|---|---|---|
/send/{src}/{dst} | float | 0.0 – 1.0 | Set send level from source to destination aux |
DCA Control
| Address | Type | Range | Action |
|---|---|---|---|
/dca/{n}/fader | float | 0.0 – 1.0 | DCA fader level |
/dca/{n}/mute | int | 0 or 1 | DCA mute on/off |
DCAs are numbered 1 – 24.
Preamp Control
| Address | Type | Range | Action |
|---|---|---|---|
/preamp/{n}/gain | float | 0.0 – 1.0 | Preamp gain (min to max) |
/preamp/{n}/pad | int | 0 or 1 | Pad on/off |
/preamp/{n}/48v | int | 0 or 1 | Phantom power on/off |
Socket numbers are 1-indexed (matching the physical socket labels).
Timecode
| Address | Type | Action |
|---|---|---|
/tc/arm | — | Arm timecode engine |
/tc/disarm | — | Disarm timecode engine |
/tc/position | string, string, int | Query/broadcast: position (HH:MM:SS:FF), fps, armed (0|1) |
/tc/cue/fired | string, string, int | Broadcast when cue fires: song name, section name, scene number |
Colour Values
| Value | Colour |
|---|---|
| 0 | Off (default) |
| 1 | Red |
| 2 | Green |
| 3 | Yellow |
| 4 | Blue |
| 5 | Purple |
| 6 | Light Blue |
| 7 | White |
OSC with Bitfocus Companion
To control your mixer from a Stream Deck via Companion:
- In Companion, add a Generic OSC connection
- Set the target IP to your Mac's address and port to 8000
- Create buttons with OSC actions, e.g.
/scene/recallwith argument42 - For mute toggles:
/ch/1/mutewith argument1or0
OSC with QLab
QLab can send OSC cues directly — no MIDI routing required:
- In QLab, create a Network cue (OSC type)
- Set destination to your Mac's IP address, port 8000
- Set the OSC message, e.g.
/scene/recall 42
Multi-Mixer OSC Targeting
By default, OSC commands are sent to all connected mixers. To target a specific mixer, prefix the address with /mixer/{name}/:
| Address | Target |
|---|---|
/ch/1/mute 1 | All mixers |
/mixer/FOH/ch/1/mute 1 | Only the mixer named "FOH" |
/mixer/MON/scene/recall 42 | Only the mixer named "MON" |
OSC Feedback (Bidirectional)
When the mixer sends MIDI data back (e.g., mute state changes, scene recalls from the console surface), A&H MIDI Bridge translates them to OSC and broadcasts to all connected OSC clients. Feedback addresses:
| Address | Type | Description |
|---|---|---|
/ch/{n}/mute | int | Mute state feedback (0=unmuted, 1=muted) |
/dca/{n}/mute | int | DCA mute state feedback |
/scene/current | int | Currently recalled scene number |
/preamp/{n}/gain | float | Preamp gain value (0.0–1.0) |
12. Stream Deck / Remote API
A&H MIDI Bridge includes a built-in WebSocket API server that enables control from Elgato Stream Deck (via Bitfocus Companion), custom scripts, and other external tools.
Enabling the API
ws://localhost:28785Stream Deck via Bitfocus Companion
To control your mixer from a Stream Deck:
- In Companion, add a Generic WebSocket connection
- Set the URL to
ws://your-mac-ip:28785 - Create buttons that send JSON commands (see API Reference below)
- Button states update in real-time via push notifications
API Reference
Send JSON messages to the WebSocket server. Responses and state changes are pushed automatically.
Configuration & Status
| Request | Description |
|---|---|
{"action": "status"} | Get current bridge states |
{"action": "listConfigs"} | List all configurations |
{"action": "activate", "configId": "..."} | Activate a configuration |
{"action": "connectAll"} | Connect all bridges |
{"action": "disconnectAll"} | Disconnect all bridges |
Scene Control
| Request | Description |
|---|---|
{"action": "sceneRecall", "scene": 42} | Recall scene 1–500 |
{"action": "sceneGo"} | Scene Go (Surface only) |
{"action": "sceneNext"} | Next scene |
{"action": "scenePrev"} | Previous scene |
Mute Control
| Request | Description |
|---|---|
{"action": "channelMute", "channel": 1, "value": 1} | Mute channel (value: 1=mute, 0=unmute) |
{"action": "dcaMute", "channel": 1, "value": 1} | Mute DCA 1–24 |
{"action": "muteGroupToggle", "channel": 1, "value": 1} | Toggle mute group 1–8 |
Fader Control
| Request | Description |
|---|---|
{"action": "faderLevel", "channel": 1, "value": 0.84} | Set fader level (0.0–1.0, where 0.84 ≈ 0dB) |
{"action": "dcaFader", "channel": 1, "value": 0.75} | Set DCA fader level (DCA 1–24) |
HPF & Parametric EQ
| Request | Description |
|---|---|
{"action": "hpfFreq", "channel": 1, "value": 120} | Set HPF frequency (20–20000 Hz) |
{"action": "hpfToggle", "channel": 1, "value": 1} | HPF on (1) / off (0) |
{"action": "eqParam", "channel": 1, "band": 2, "param": "gain", "value": -3.5} | Set PEQ band parameter (bands 0–3, params: type, freq, width, gain) |
Preamp Control
| Request | Description |
|---|---|
{"action": "preampGain", "channel": 1, "value": 0.5} | Preamp gain (channel = socket 1–128) |
{"action": "preampPad", "channel": 1, "value": 1} | Pad on (1) / off (0) |
{"action": "preampPhantom", "channel": 1, "value": 1} | 48V phantom power on (1) / off (0) |
Channel Name & Colour
| Request | Description |
|---|---|
{"action": "channelName", "channel": 1, "name": "Vocals"} | Set channel name (ASCII) |
{"action": "channelColor", "channel": 1, "color": 3} | Set channel colour (0–7) |
Send Levels
| Request | Description |
|---|---|
{"action": "sendLevel", "channel": 1, "destination": 3, "value": 0.6} | Send to aux (default bus type) |
{"action": "sendLevel", "channel": 1, "destination": 1, "busType": "matrix", "value": 0.8} | Send to matrix (busType: aux, matrix, fxSend, fxReturn) |
Timecode Control
| Request | Description |
|---|---|
{"action": "timecodeStatus"} | Returns current TC position, fps, armed state, last fired cue |
{"action": "timecodeArm"} | Arm timecode engine |
{"action": "timecodeDisarm"} | Disarm timecode engine |
{"action": "timecodeToggleArm"} | Toggle arm/disarm |
{"action": "timecodeSongList"} | List all songs in the active cue database |
Targeting a Specific Mixer
Add "mixer": "FOH" to any command to target a specific mixer by name. Without it, the command goes to all mixers.
Push Notifications
The server automatically broadcasts state changes to all connected clients:
| Message | Description |
|---|---|
{"type": "stateChange", "bridges": {"FOH - MIDI Thru": "connected"}} | Bridge state changed |
websocat ws://localhost:28785 from the terminal to test the API interactively. Send {"action":"status"} to verify the connection.
13. Menu Bar
A&H MIDI Bridge runs as a background service in the macOS menu bar. When you close the main window, the app continues running — connections stay active and MIDI data keeps flowing.
Menu Bar Icon
A mixer icon appears in the menu bar. When connected, a number badge shows how many bridges are active.
Quick Actions
Click the menu bar icon to access:
- Configuration list — Click any configuration to connect to it, or disconnect the active one
- Bridge status — Per-mixer, per-protocol connection states
- Disconnect All — Quickly disconnect all bridges
- Open A&H MIDI Bridge — Bring the main window back
- Quit — Fully stop the application and remove MIDI ports
14. Settings
Open Settings via the gear icon in the header or Cmd+,.
General
- Auto-connect on launch — Automatically activate the last-used configuration when the app starts
- Show MIDI activity indicators — Toggle real-time MIDI data visualization
- Log Level — Set logging verbosity (DEBUG, INFO, WARNING, ERROR)
Stream Deck / Remote API
- Enable WebSocket API — Start/stop the WebSocket server for Stream Deck and external tools
- Port — The port the server listens on (default: 28785)
- Shows connection URL, running status, and connected client count
OSC Bridge
- Enable OSC server — Start/stop the built-in OSC server (bidirectional)
- UDP Port — The port the OSC server listens on (default: 8000, range 1024–65535)
- A status indicator shows whether the server is running
About
Shows application version, the Allen & Heath logo, and Koodisto Digital branding with a link to koodisto.org.
15. Troubleshooting
Mixer stays in "Connecting" state
- Verify the mixer's IP address is correct
- Ensure your Mac and the mixer are on the same network/subnet
- Check that port 51325 is not blocked by a firewall
- For dLive/AHM: the mixer must accept TLS connections
MIDI ports not visible in DAW
- Ensure the configuration is connected (not just saved)
- Try restarting your DAW — some apps only scan for MIDI ports at startup
- Open Audio MIDI Setup.app → Window → Show MIDI Studio to verify ports exist
Connection drops frequently
- Check network stability — use a wired Ethernet connection when possible
- Avoid running on congested Wi-Fi networks during shows
- The app will attempt to reconnect automatically
CodeSign / build errors
- In Xcode: Target → Signing & Capabilities → uncheck "Automatically manage signing"
- Set Signing Certificate to "Sign to Run Locally"
- If extended attribute errors occur: run
xattr -cr ~/Desktop/AHMIDIBridge
OSC messages not reaching the mixer
- Verify the OSC server is running (green indicator in Settings)
- Check the UDP port is not blocked by the macOS firewall
- Ensure at least one mixer bridge is connected — OSC commands are sent to all connected mixers (use
/mixer/{name}/...to target one) - Use the MIDI Monitor tab to verify OSC commands are being translated to MIDI
- Check the OSC address format — addresses are case-sensitive and must start with
/
SysEx messages not working (channel names, colours, sends)
- Ensure you are using A&H MIDI Bridge v0.2.0 or later — earlier versions did not support SysEx forwarding
- Use the MIDI Monitor to check that SysEx messages appear with the correct A&H header
- Verify the mixer's MIDI base channel matches your message channel
Settings gear doesn't open
- Requires macOS 14 (Sonoma) or later
- Alternative: press Cmd+,