oscmix implements an OSC API for RME's Fireface UCX II running in class-compliant mode, allowing full control of the device's functionality through OSC on POSIX operating systems supporting USB MIDI.
Most things work, but still needs a lot more testing, polish, cleanup. Some things still need to be hooked up in the UI or implemented in oscmix.
- RME Fireface UCX II
oscmix [-dl] [-r recvaddr] [-s sendaddr]
oscmix reads and writes MIDI SysEx messages from/to file descriptors 6 and 7 respectively, which are expected to be opened.
By default, oscmix will listen for OSC messages on udp!127.0.0.1!7222
and send to udp!127.0.0.1!8222.
See the manual, oscmix.1, for more information.
On Linux systems, you can use bundled alsarawio program open and
configure a given raw MIDI subdevice and set up these file descriptors
appropriately.
To determine your MIDI device, look for it in the output of amidi -l
(the one ending in ,1 with the name Fireface UCX II).
For example:
alsarawio 2,0,1 oscmixThere is also a tool alsaseqio that requires alsa-lib and uses
the sequencer API.
To determine the client and port for your device, find it (port 1
of the Fireface UCX II) in the output of aconnect -l.
For example:
alsaseqio 24:1 oscmixOn BSD systems, you can launch oscmix with file descriptors 6 and 7 redirected to the appropriate MIDI device.
For example:
oscmix 6<>/dev/rmidi1 7>&6The gtk directory contains oscmix-gtk, a GTK frontend that communicates with oscmix using OSC.
To run oscmix-gtk without installing, set the GSETTINGS_SCHEMA_DIR
environment variable.
GSETTINGS_SCHEMA_DIR=$PWD/gtk ./gtk/oscmix-gtkThe web directory contains a web frontend that can communicate with oscmix through OSC over a WebSocket, or by directly to an instance of oscmix compiled as WebAssembly running directly in the browser.
The web UI is automatically deployed at https://michaelforney.github.io/oscmix.
It is tested primarily against the chromium stable channel, but patches to support other/older browsers are welcome (if it doesn't complicate things too much).
Also included is a UDP-to-WebSocket bridge, wsdgram. It expects
file descriptors 0 and 1 to be an open connection to a WebSocket
client. It forwards incoming messages to a UDP address and writes
outgoing messages for any UDP packet received. Use it in combination
with software like s6-tcpserver or s6-tlsserver.
s6-tcpserver 127.0.0.1 8222 wsdgramTo build oscmix.wasm, you need clang supporting wasm32, wasm-ld,
and wasi-libc.
The OSC API is not yet final and may change without notice.
| Method | Arguments | Description |
|---|---|---|
/input/{1..20}/mute |
i enabled |
Input n muted |
/input/{1..20}/fxsend |
f db (-65-0) |
Input n FX send level |
/input/{1..20}/stereo |
i enabled |
Input n is stereo |
/input/{1..20}/record |
i enabled |
Input n record enabled |
/input/{1..20}/playchan |
i 0=off 1-60 |
Input n play channel |
/input/{1..20}/msproc |
i enabled |
Input n M/S processing enabled |
/input/{1..20}/phase |
i enabled |
Input n phase invert enabled |
/input/{1..4}/gain |
f 0-75 (n=1,2) 0-24 (n=3,4) |
Input n gain |
/input/{1..2}/48v |
i enabled |
Input n phantom power enabled |
/input/{3..8}/reflevel |
i 0=+4dBu 1=+13dBu 2=+19dBu |
Input n reference level |
/durec/status |
i |
DURec status |
/refresh |
none | W Refresh device registers |
/register |
ii... register, value |
W Set device register explicitly |
TODO Document rest of API. For now, see the OSC tree in oscmix.c.
There is an IRC channel #oscmix on irc.libera.chat.

