Maolan MixOSC
Rust OSC client and control surface for Behringer X32-family mixers. A desktop GUI built with Iced, plus a reusable library for discovery, state loading, and meter parsing.
Maolan Integration
MixOSC is built into Maolan as a dedicated X32 hardware mixer view. When enabled, the full MixOSC control surface runs directly inside the DAW, sharing the same Iced rendering context and widget theme.
How It Works
- Click the sliders icon in the Maolan toolbar to open the X32 view.
- Maolan instantiates
mixosc::app::StatusAppinside the GUI state. - OSC subscription starts only while the X32 view is visible, saving resources.
- All mixer messages are wrapped as
Message::HwMixerand dispatched through the standard update loop. - The MixOSC surface renders natively using the same Iced backend as the rest of Maolan.
Technical Details
- Integrated as
View::X32in the Maolan view state. - Uses
mixosc::app::subscriptionfor live OSC updates when active. - Mixer state is owned by the DAW and updated through
mixosc::app::update. - The surface view is produced by
mixosc::app::viewand mapped into Maolan's message system. - Connection to the X32 is handled automatically via UDP broadcast discovery or a configured address.
Screenshot of MixOSC inside Maolan
[ MixOSC picture placeholder ]
Overview
MixOSC is a standalone Rust application and library for controlling Behringer X32 mixers over OSC. It discovers mixers on the local network and presents a mixer-style control surface.
Desktop GUI
- Built with
icedandmaolan-widgets. - Auto-discovers X32 mixers on the local network.
- Subscribes to live OSC updates with
/xremoteand meter subscriptions. - Real-time UI updates when the mixer state changes locally.
Rust Library
- X32 UDP/OSC discovery and connection probing.
- State loading and updates for all strip types.
- Meter packet parsing for input and main buses.
- Console update parsing with
ConsoleUpdateevents.
Current GUI Behavior
When a mixer is reachable, the application loads and displays the full mixer surface in real time.
Supported Strips
CH 01-32— Input channelsAUX 01-08— Auxiliary inputsBUS 01-12— Mix busesFX 01-08— FX returnsMTX 01-06— MatricesDCA 1-8— DCA groupsMain LR— Main stereo bus
Real-Time Parameters
- Name and scribble-strip color
- Input gain or trim
- Sends to buses and matrices
- Pan
- Fader level
- Input and main/matrix meters
- Mute and Solo
What Is Implemented per Strip Type
Each strip type exposes a specific subset of controls based on what the X32 hardware supports.
Fully Supported
Channels and aux inputs: gain/trim, sends to buses 1-16, pan, fader, mute, solo, color, name, meters
FX returns: sends to buses 1-16, pan, fader, mute, solo, color, name
Buses: sends to matrices 1-6, pan, fader, mute, solo, color, name
Partially Supported
Matrices: fader, mute, color, name, matrix meter
DCAs: fader, mute, color, name
Main LR: fader, mute, color, stereo meter
Implementation Notes
- Gain uses headamp control where available and trim otherwise.
- Channel
17-32use trim gain; earlier channels and supported aux inputs can use headamp gain. - Gain is not exposed for buses, FX returns, matrices, or DCAs.
- Pan is not exposed for matrices or DCAs.
- DCA and matrix solo are not sent to the mixer.
- Master solo is a local UI toggle and is not sent to the mixer.
Running
Start the application with automatic discovery, or connect to a specific mixer by address.
Automatic Discovery
cargo run
Connect to a Specific Mixer
cargo run -- 192.168.1.62
With a custom port:
cargo run -- 192.168.1.62:10023
Environment Variable
MIXOSC_MIXER_ADDR=192.168.1.62 cargo run
The default X32 port is 10023.
Library Surface
The crate exports OSC/X32 helpers from src/x32.rs for
building custom integrations.
Discovery & Connectivity
Strip State Control
Meter Handling
Console Updates & Constants
Development
This repository has a single binary entry point in
src/main.rs and a reusable library in
src/lib.rs.
cargo check