Skip to main content

Shure Microflex / IntelliMix

Shure's Microflex Ecosystem — the MXA710/902/910/920 ceiling and table microphone arrays, the IntelliMix P300 DSP, the ANIUSB-MATRIX and ANIUSB-C, the ANI4IN / ANI4OUT Dante interfaces, and MXN network interfaces — is controlled over Shure's Command Strings protocol: a plain-ASCII, angle-bracket-framed protocol carried over TCP (default port 2202). This driver connects to one Shure device on the LAN and exposes mute (device-wide and per-channel), per-channel gain (in dB, or as a 0–100 volume for an AV zone), channel names, preset recall, and device identify (flash).

One GEM device represents a single Shure device. If the device has numbered channels (P300, ANIUSB, ANI4IN / ANI4OUT), each channel you want to mute or level independently becomes a zone whose address is the channel number. For a single-output array (e.g. MXA910), use device-wide mute: either no zone, or a zone whose address is device.

How the protocol works​

Every message is wrapped in < ... >:

  • Requests: < SET DEVICE_AUDIO_MUTE ON >, < GET DEVICE_AUDIO_MUTE >, < SET 2 AUDIO_MUTE TOGGLE >.
  • Replies: < REP DEVICE_AUDIO_MUTE ON >, < REP 2 AUDIO_MUTE OFF >, < REP DEVICE_ID {Conf Room Ceiling} >.

The device also pushes < REP ... > notifications on its own whenever a value changes at the hardware (someone taps a mute button, a preset is recalled from Designer), so GEM state stays current between polls. There is no login — the control port is open whenever the device is on the network.

Prerequisites​

  • A Shure Microflex Ecosystem device on the LAN with a static IP or DHCP reservation.
  • TCP port 2202 reachable from the GEM host. Only a limited number of concurrent control connections are allowed, so close any Shure Designer or other third-party control session that is holding a connection if GEM cannot connect.

Setup​

  1. In GEM admin, add a device with the Shure Microflex / IntelliMix driver, under an AV subsystem.
  2. Set the device attributes:
    • ip — the Shure device IP.
    • port — 2202 (default).
  3. Save and reload the device. On connect the driver reads the device id, model, device mute state, and current preset.
  4. For per-channel mute (P300 / ANIUSB), add a zone per channel, bind it to the Shure device, and set its address to the channel number. For a zone that mutes the whole device, set its address to device.
Device-wide vs per-channel

A zone addressed device (any capitalisation), or a command sent with no address or a blank one, targets device-wide mute (DEVICE_AUDIO_MUTE), and a device zone also follows the device mute state. A numeric address targets that channel (<n> AUDIO_MUTE). An MXA910 has no numbered input channels, so use device-wide mute for it.

Don't leave a device-wide zone's address blank. GEM fills a blank zone address with the zone's own id when it loads the zone, so the zone would act on a channel numbered like its id (and poll that channel too), not the whole device.

Attribute reference​

Device​

AttributeRequiredDescription
ipyesLAN IP / hostname of the Shure device.
portnoCommand-strings TCP port. Defaults to 2202; a blank, zero or out-of-range value also uses 2202.
min_dbnoGain sent for volume 0, for channels whose zone sets none. Default -60.
max_dbnoGain sent for volume 100, and the most volume_up can reach, for channels whose zone sets none. Default 0 (unity).
volume_step_dbnoHow far volume_up / volume_down move when the command gives no step_db. Default 2.
status_intervalnoMute/preset re-poll interval in ms. Defaults to 30000, and a zero, negative or unparseable value also uses 30000. The shortest interval is 1000. A new poll never starts while the previous one is still running.

Runtime state the driver writes back as device attributes: mute_state (on/off), preset (number), device_id_label (the device name), model.

Zone​

AttributeRequiredDescription
addressnoChannel number for per-channel mute and gain (e.g. 1, 2), or device for device-wide. See the note above about blank addresses.
min_db / max_dbnoThis channel's volume window, overriding the device's.

The driver writes these onto channel zones as the device reports them: mute_state, gain_db (the channel's gain in dB), volume (that gain as a 0–100 position in the channel's window) and channel_name.

Commands​

CommandWhat it does
mute_on / mute_offMute / unmute — device-wide, or the channel in address.
mute_toggleToggle mute (native TOGGLE), device-wide or per-channel.
get_muteQuery mute state.
presetRecall a preset by number (model-dependent, typically 1–10).
get_presetQuery the current preset.
flash_on / flash_offFlash the device LEDs to locate it (identify).
get_device_id / get_modelRead the device name / model.
gain (address, gain_db)Set a channel's gain in dB, −110 to +30 (0 is unity). Not limited by the volume window. Use it for commissioning and macros.
volume (address, level)Set a channel's gain from a 0–100 level inside its min_db..max_db window.
volume_up / volume_down (address, step_db)Step a channel's gain, never past max_db or below min_db.
get_gainQuery a channel's gain.
get_channel_nameQuery a channel's name as set in Shure Designer.

Gain and AV-zone volume​

Gain is the AUDIO_GAIN_HI_RES token: 0–1400 in tenths of a dB, with 1100 at unity. The gain commands always send the channel two-digit (1 goes out as 01), as Shure's reference writes it. Mute keeps sending the address exactly as typed.

To use a channel as the volume of an AV zone, for example the P300 output that feeds the room's amplifier:

  1. Add a zone on the Shure device whose address is that channel.
  2. In the AV zone, set Volume Device to the Shure device and the address to the channel.
  3. Set min_db and max_db (on the zone, or on the device for every channel) to the range the 0–100 slider should cover. The default is −60 to 0 dB. max_db is the room's ceiling: volume and volume_up never go above it, whatever the slider or a macro asks for.

volume_up and volume_down step from the gain the channel last reported, so the room's volume buttons work in fixed dB steps. A channel that hasn't reported a gain yet refuses the step and returns an error rather than guessing. The status poll reads gain for every channel zone, so that only happens briefly after connect.

Microphone faders work the same way: give each wireless mic's input channel its own zone and AV zone, with a window suited to a mic (for example −30 to +6 dB).

Zone address format​

The zone address is a bare channel number as it appears on the device (P300 / ANIUSB channel strips), or device for the device's overall mute. Commands go out with the address exactly as typed (surrounding spaces are trimmed). A device that reports the channel zero-padded (01) still updates the zone addressed 1. Which channels exist is model-specific, so check the device in Shure Designer.

The driver refuses an address it cannot send safely, and the command returns an error: an unfilled placeholder such as [@zone.address], or an address containing spaces, <, >, { or }.

Known limitations​

  • No routing or processing blocks. Matrix routing, AEC/AGC block parameters and metering (SAMPLE) are not exposed. They are large, model-specific surfaces best configured in Shure Designer. For routing modes (meeting, presentation, background music), build them as Designer presets and recall them with preset.
  • Model-dependent tokens. A token a given model does not implement returns < REP ERR >, which the driver logs and ignores — it never crashes the driver, but the command has no effect. Confirm channel numbers and preset counts against the actual model.
  • No discovery command. Shure devices are discovered via mDNS/Designer, not the command-strings port. Add the device by IP and, for channel muting, add zones with known channel numbers.

Troubleshooting​

SymptomCheck
No response / connection refusedConfirm the IP and that port 2202 is reachable. Close any Shure Designer / third-party control session — concurrent control connections are capped.
Device mute works, channel mute does nothingThe channel number in zone.address must be a real channel on that model. An MXA910 has no numbered input channels — use device-wide mute.
volume_up says "gain not known yet"The channel hasn't reported a gain since connect. Check the channel has a zone (only channel zones are polled for gain) and that the model answers AUDIO_GAIN_HI_RES on that channel.
Volume slider tops out below where the room should goRaise max_db on the channel's zone (or the device). The slider can never go above it.
Preset recall does nothingConfirm the preset number exists on the model and was configured in Shure Designer.
State looks staleThe driver re-polls on status_interval and also receives unsolicited change notifications; a persistently stale value usually means the control connection dropped — check the device's connection state in GEM.
Device keeps reconnectingThe driver drops the connection and reconnects when a device that has been answering stops replying for three polls in a row (at least 45 seconds). It does this so a device that lost power doesn't keep showing as connected. If you set a ping_command, the ping watchdog decides when to reconnect instead. Repeated reconnects mean polls are going unanswered, so check the network path and the device's control-connection limit.