Hi, you have reached my dev branch which is a fork of https://github.com/michaelforney/oscmix.
Note
My branch is NOT sponsored, authorized, endorsed, or associated with RME Audio in any way. This is an independent implementation created for educational purposes and to provide Linux (and macOS) support for the RME hardware.
Warning
Keep in mind that this content may be untested/experimental/wip state.
oscmix implements an OSC API for some RME's Fireface units 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
- RME Fireface 802
- RME Fireface UCX
- RME Fireface UFX
- RME Fireface UFX II
- RME Fireface UFX III
- RME Fireface UFX+
Pre-Compiled binaries are available for arm64 and x86_64 architectures. Each arch is available for linux and darwin (macOS).
Check the release section at: https://github.com/huddx01/oscmix/releases
If you prefer building your own from the sources, follow the steps below...
sudo apt update
sudo apt install -y libasound2-dev pkg-config libgtk-3-dev libglib2.0-dev libavahi-client-dev clang lld gitXcode Command Line Tools or Xcode are required. Bonjour (mDNS) is built into macOS.
xcode-select --installFirst, decide which repo/branch fits your needs/unit.
- 2a) If you want use this repo's dev branch:
git clone https://github.com/huddx01/oscmix.git
cd oscmix
git switch dev- 2b) Or, if you want use michaelforney's original repo:
git clone https://github.com/michaelfourney/oscmix.git
cd oscmixFrom the oscmix dir, use make to build the binaries.
make oscmix
make alsaseqio
make alsarawio
make gtk
make tools/regtoolIf you want to build the wasm too (needed for own webserver), you'll need additional dependencies. See: https://github.com/huddx01/oscmix/tree/dev?tab=readme-ov-file#web-ui
oscmix [-dhlz] [-m [port]] [-p midiport] [-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 alsarawio,
alsaseqio (Linux) or coremidiio (macOS).
By default, oscmix will listen for OSC messages on udp!127.0.0.1!7222
and send to udp!127.0.0.1!8222.
| Flag | Description |
|---|---|
-d |
Enable debug output |
-h |
Show help and exit |
-l |
Disable level metering |
-m [port] |
Send OSC updates to multicast address 224.0.0.1 on given port (default: 8222) |
-p midiport |
MIDI port name (default: $MIDIPORT env var) |
-r addr |
OSC receive address (default: udp!127.0.0.1!7222) |
-s addr |
OSC send address (default: udp!127.0.0.1!8222) |
-z |
Zeroconf - Register OSC service via mDNS/DNS-SD (_osc._udp) for automatic service discovery |
See the manual pages for more information: man oscmix, man alsaseqio, man alsarawio, man coremidiio.
When started with -z, oscmix registers itself as an _osc._udp service on the local network.
On Linux this uses Avahi; on macOS Bonjour is used (no extra dependencies).
mDNS / DNS-SD Discovery Implementation is based and according the OSC v.1.1 spec. For details see NIME 2009 paper.
The registered service includes device metadata (name, serial, channel count, ports) so that compatible clients — including the oscmix Qt UI — can discover and connect automatically without manual IP/port configuration.
# Start with multicast output and mDNS registration
alsaseqio 16:3 oscmix -m -z
# Use a custom multicast port
alsaseqio 16:3 oscmix -m 8233 -z
# Verify registration on Linux
avahi-browse _osc._udp
# Verify registration on macOS
dns-sd -B _osc._udp localOn Linux systems, you can use alsarawio or asaseqio to run oscmix.
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 last ending port with the name Fireface xyz...).
Example:
$ amidi -l
Dir Device Name
IO hw:0,0,0 Fireface UFX III (xxxxxxxx) Por
IO hw:0,0,1 Fireface UFX III (xxxxxxxx) Por
IO hw:0,0,2 Fireface UFX III (xxxxxxxx) Por
IO hw:0,0,3 Fireface UFX III (xxxxxxxx) PorWe use the last port from the result above to run oscmix:
alsarawio 0,0,3 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 the client
and the last port in the output of aconnect -l for your device.
Example:
$ aconnect -l
...
client 16: 'Fireface UFX III (xxxxxxxx)' [type=Kernel,card=0]
0 'Fireface UFX III (xxxxxxxx) Por'
1 'Fireface UFX III (xxxxxxxx) Por'
2 'Fireface UFX III (xxxxxxxx) Por'
3 'Fireface UFX III (xxxxxxxx) Por'
...We use the client and last port from the result above to run oscmix:
alsaseqio 16:3 oscmixWith multicast output and mDNS registration:
alsaseqio 16:3 oscmix -m -zOn 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>&6On macOS (Darwin) systems, you can build and launch oscmix, too.
At least, Xcode Command Line Tools are neccesary (not needed if you have Xcode installed).
You can install the Xcode Command Line Tools via:
xcode-select --installAfterwards, go to the cloned oscmix directory (assure you are on dev branch) and build oscmix and coremidiio via:
make oscmix coremidiioIf this is done, check your port number and remember the exact name of your unit:
./coremidiio -lFor example, if your unit would appear like this... "4 Fireface 802 (12345678) Port 2" ...the corresponding command would be:
./coremidiio -f 6,7 -p 4 ./oscmix -p 'Fireface 802 (12345678) Port 2'Note
You can also set MIDIPORT env variable to 'Fireface 802 (12345678) Port 2' in this example.
With multicast output and mDNS registration:
./coremidiio -f 6,7 -p 4 ./oscmix -m -zThe 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-gtkNote
This is a first rough draft after only a few days of learning Qt - expect rough edges. Sources will follow once it's in a shareable state.
NEW: A pre-built binary (for first try-out) is available in the Releases
For a current feature description see the oscmix Qt UI wiki page
- Native experience - proper window chrome, system fonts, and trackpad scrolling that GTK can't match on Linux and macOS
- Universal Code - no change of one single code line needed for building on each system (Linux/macOS/Windows). While the UI exacly looks the same on all.
- Open GL/Metal - Qt supports direct graphics engine support for all systems, without further hassles...
This frontend is at the stage where your feedback shapes the direction. Two things are especially useful right now:
- What matters to you in the UI? Missing controls, layout preferences, workflow details - just open an issue.
- GTK vs. Qt priority? Development time is finite. If you actively use or plan to use the Qt frontend, let me know via issue - it directly influences where time goes.
The 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 for this fork/dev branch is automatically deployed at https://huddx01.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.
For current state of full OSC API reference, see the oscmix OSC API wiki page.
-
@juanramoncastan - UFX II verifications, UI improvements, layout fixes and valuable suggestions (#5)
-
@Sojuzstudio - Special thanks - for lots of tipps, ideas, testing with own hw on linux, and very useful feedback regarding oscmixQt UI and much more!


