Reference

OSC reference

ampOSC speaks BroadwayOSC. This page is what that means on an Allen & Heath desk: every address, the unit its value carries, and which console answers it.

Connecting

UDP to port 8765. No handshake — send anything and you are registered as a client. Send /Unsubscribe/* to leave cleanly. Several clients at once is fine; each is identified by its address and port and keeps its own subscriptions.

ampOSC also advertises itself on the local network as _osc._udp under the name ampOSC, so a client that browses for OSC services can find it without being given an address.

Paths are case-insensitive on input, but the bridge always echoes canonical PascalCase — /Input/1/Level. Match replies case-insensitively rather than against what you sent. Every index is 1-based.

Message intent

Four intents, and the bare form is usually what you want.

/Input/1/Level ,f -6.0        set input 1 to -6 dB
/Input/1/Level                ask, and subscribe from now on
/Subscribe/Input/*/Level      subscribe without asking first
/Unsubscribe/Input/1/Level    stop
/Unsubscribe/*                stop everything

A path with a value is a SET. A path with no value is a GET, and asking also subscribes you — which is the shortest way to get a client in sync and keep it there. The explicit /Set/ and /Get/ prefixes do the same thing if your client needs them.

Subscriptions last until you drop them; there is no keepalive.

Two modes

Everything above describes subscription mode, which is on by default. The Enable Subscriptions switch in the app's OSC Server settings turns it off, and then the server floods instead.

ModeWhat a client is sent
Subscription — the default Only what it asked for, by GET or by /Subscribe. Everything in this section applies
Flood Every value change, to every client that has ever sent a message. Nothing has to be asked for, /Subscribe does nothing, and the app's Subscriptions count reads ALL rather than a number

A client written for one mode works unchanged in the other, but the traffic it sees is completely different — a surface that never subscribes is fully fed in flood mode and goes silent the moment subscriptions are switched on. If you are writing a client for other people to use, subscribe explicitly and it will be right either way.

Addressing

An index can be one channel, a range, a list, or all of them.

/Input/3/Level                one channel
/Input/1-8/Level              a range
/Input/1,4,5-8/Level          a list
/Input/*/Level                every input

So a single message addresses as many crosspoints as you like: /Input/1-48/Aux/1-12/Level is 576 of them.

Channel types

Counts are what each manufacturer's protocol document publishes, not what a particular model has fitted. Stereo types are their own path segment — /GroupStereo/1/Level — not a flag on the mono one.

TypedLiveAvantisSQSQ+ QuCQ
Input1289648483216
Group / GroupStereo62 / 3154 / 2712 / 612 / 6shared with Mix
Aux / AuxStereo62 / 3154 / 2712 / 612 / 612 (Mix)6 (Out)
Matrix / MatrixStereo62 / 3154 / 273 / 16 / 33
FxSend / FxSendStereo16 / 1612 / 124 / 44 / 444
FxReturnStereo16128864
MainStereo631111
Dca24168884
MuteGroup888884
UfxSend / UfxReturn8 / 88 / 84 / 4

Level, mute, name, colour

AddressTypeUnit
/{Type}/{n}/LevelfdB, −90 to +10. Unity 0, −90 fully off
/{Type}/{n}/MuteT/FT = muted
/{Type}/{n}/NamesUp to 8 characters
/{Type}/{n}/ColorRPacked 0x00RRGGBB
/{Type}/{n}/MainAssignT/FOn the main LR bus

Name and colour are dLive and Avantis only. Neither SQ nor SQ+ carries channel names or colours in its MIDI protocol, so those addresses answer nothing there.

Sends

A send is the destination bus as a path segment under the source channel. There is no Send keyword.

/Input/1/Aux/4/Level   ,f -6.0     input 1 to aux 4, at -6 dB
/Input/1/Aux/4/Enable  ,T          route it
/Input/1/Group/2/Level ,f 0.0      input 1 to group 2, at unity
/Input/1/AuxStereo/3/Level ,f -3.0 to a stereo aux

Destination types are Aux, Group, FxSend and Matrix, with their stereo forms. Send levels use the same dB scale as a fader.

Two limits from the consoles. Avantis has no send routing — levels work, Enable does not. And on SQ and SQ+ an input cannot send to a matrix: matrix sources are LR, aux and group.

Pan

AddressTypeUnit
/{Type}/{n}/Panf−100 hard left, 0 centre, +100 hard right
/{Type}/{n}/{Bus}/{m}/PanfThe same, on a send

SQ and SQ+ only. Neither dLive nor Avantis exposes pan over MIDI. On the SQ pair it is available on inputs, groups, FX returns and the outputs — not on DCAs, mute groups or FX sends.

DCA and mute groups

/Input/1/Dca/3/Assign        ,T     put input 1 in DCA 3
/Input/1/MuteGroup/2/Assign  ,F     take it out of mute group 2

dLive and Avantis only. The SQ pair can mute a DCA and set its level, but membership is not in its protocol.

Assign or Enable

Two words that look interchangeable and are not. The rule is about what kind of thing you are switching.

SuffixMeansUsed on
Assign Membership of a control group Dca, MuteGroup, Main
Enable A send crosspoint on or off, or a processor block in or out Aux, Group, FxSend, Matrix — and Filter, Eq

Both take T / F. Every path segment is exactly its internal token name, so there is no lookup table to consult — the path is predictable from the thing it addresses.

Preamp

AddressTypeUnit
/Input/{n}/TrimfdB. dLive over MIDI is +5 to +60
/Input/{n}/PadT/FInput pad
/Input/{n}/PhantomT/F48 V

dLive only, and addressed by socket rather than by channel — 128 of them: 64 local, then two DX expanders of 32.

No Preamp/ sub-block: three parameters do not need one.

Filters and EQ

/Input/1/Filter/1/Freq   ,f 120.0    high-pass at 120 Hz
/Input/1/Filter/1/Enable ,T
/Input/1/Eq/2/Freq       ,f 1000.0
/Input/1/Eq/2/Gain       ,f 3.0
/Input/1/Eq/2/Q          ,f 1.0      octaves
/Input/1/Eq/2/Type       ,s "Bell"

Filters are their own indexed block, separate from the EQ — so a high-pass is Filter/1, not an EQ band. dLive has four parametric bands, numbered 1 to 4. Frequencies are hertz, gains are dB, and Q is bandwidth in octaves.

Type is a string: "Bell", "Lowshelf", "Highshelf", "Lpf", "Hpf". dLive restricts shelves and passes to the outer bands.

dLive only. Neither Avantis nor the SQ pair exposes EQ over MIDI.

Scenes and cues

/Scene/Recall    ,i 42     recall scene 42 — every console
/CueList/Recall  ,i 150    recall a cue by its position in the list
/CueList/Go                fire the standby cue    dLive only
/CueList/Next              advance                 dLive only
/CueList/Previous          go back                 dLive only

Recall is a bank plus a program change, which is the one control path every one of these desks shares — so /Scene/Recall works everywhere. /CueList/Go, /Next and /Previous ride the surface's user CC messages and are dLive only.

dLive and Avantis hold 500 scenes; the SQ pair holds 300. Recalling a scene at the desk sends the same message back, so a scene fired on the surface reaches every subscriber.

Cue lists differ. dLive has 2000 recall IDs but only on the Surface port. The SQ pair recalls cues by position and supports MIDI Show Control. Avantis has no cue list at all — scenes only.

MIDI Show Control

Its own family, and SQ, SQ+ and Qu.

/Msc/Go     [,i cue] [,f fadeSec]   both arguments optional
/Msc/Load   ,i cue
/Msc/Reset

/CueList/ is the surface's own cue-list navigation, on dLive; /Msc/ is the MSC protocol, on SQ, SQ+ and Qu. Two different things on different desks, which is why they are no longer both spelled /Cue/. MSC has no next or previous — those are not MSC commands.

Transport — read-only

You cannot drive the desk with these. A mixer has no transport. Allen & Heath consoles transmit MIDI Machine Control — their surface transport buttons are there to drive an external DAW or recorder — and they do not act on MMC they receive. A SET to /Transport/… is rejected.

What they are is a notification. Subscribe, and when an operator presses a transport button on the desk, ampOSC pushes the matching path to you. None of them carry a value.

/Transport/Stop
/Transport/Play
/Transport/FastForward
/Transport/Rewind
/Transport/Record
/Transport/Pause

/Transport/Start and /Transport/Continue are accepted as spellings of /Play, so an older client's subscription keeps working. New ones should use /Play.

CQ has no MMC at all, so nothing on this list ever arrives from one.

Surface controls

/Strip/1/Fader   ,f -6.0
/Strip/1/Mute    ,T
/Strip/5/Rotary/2 ,f 0.5
/SoftKey/3/Press ,T
/Ufx/Key         ,i 7
/Ufx/Scale       ,i 1

The documented consoles have 32 assignable MIDI strips each. Soft keys are Avantis and the SQ pair — dLive has none in its protocol. UFX is dLive, Avantis and SQ+; plain SQ has none.

Value types

TagTypeUsed for
ffloat32Every engineering value — dB, hertz, octaves, pan
iint32Scene and cue numbers, UFX key and scale
sstringNames, EQ shape
T / FbooleanMute, enable, assign — no data bytes
ItriggerActions like Go
RRGBColour, packed 0x00RRGGBB

Values are always engineering units — the number a sound engineer would read off the desk. Never a normalised 0-to-1 float. Each console encodes a fader differently, and ampOSC converts and clamps at the wire, so a client never sees a raw console value.

What each console does

Six families, and the OSC surface is identical on all of them — the path grammar never changes. What differs is which parameters and how many channels exist, which is why you should ask the inventory rather than hardcoding per-family availability. A path that is not supported is accepted and quietly does nothing.

FamilyAddressingStatus
dLive MIDI channel + note Verified
Avantis MIDI channel + note Verified
SQ NRPN Beta
SQ+ NRPN Beta
Qu NRPN Beta
CQ NRPN Beta

Beta means not yet verified against hardware. Those paths are built from the published protocol documents and should be right, but nobody has proved them on a desk. dLive and Avantis are the proven paths.

Every number in the two tables — channel counts above, capabilities below — is read from that family's own published protocol document. Where a desk is configurable, the figure is the protocol's maximum rather than what a particular one has fitted, so the inventory is still the thing that bounds your paths.

 dLiveAvantisSQSQ+ QuCQ
Level, Mute
Name, Colour
Send level
Send Enable (routing)
Pan and balance
DCA assignment✓ 24✓ 16
Mute group assignment
MainAssign
Preamp — trim, pad, 48V
EQ and high-pass
Scenes500500300300300128
Cue list recall
Surface CC Go / Next / Prev
MIDI Show Control
Transport notifications
MIDI strips3232323232
Soft keys✓ 16✓ 16✓ 16✓ 8✓ 3
UFX units884
Selectable fader law
Read a value backeverythingname, coloureverythingeverythingeverythingmute, level, pan
Metering

Nothing meters. No published protocol reports audio level over the MIDI link, so no client can draw a meter from it. And on SQ, SQ+ and Qu the fader law is a console setting no message reports. ampOSC implements Linear taper only, so set those desks to Linear taper. dLive, Avantis and CQ each have a single fixed law and need nothing set.

The protocol itself is published in full: the BroadwayOSC specification · PDF · Markdown.