~mcf/oscmix

Mixer for RME Fireface UCX II
gtk: Clamp level values to level bar range
gtk: Fix default addresses and ports
Don't warn if OSC write fails with ECONNREFUSED

refs

main
browse  log 

clone

read-only
https://git.sr.ht/~mcf/oscmix
read/write
git@git.sr.ht:~mcf/oscmix

You can also use your local clone with git send-email.

#oscmix

builds.sr.ht status

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.

#Current status

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.

#Supported devices

  • RME Fireface UCX II

#Usage

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.

#Running

#Linux

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 oscmix

There 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 oscmix

#BSD

On 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>&6

#GTK UI

The gtk directory contains oscmix-gtk, a GTK frontend that communicates with oscmix using OSC.

oscmix-gtk

To run oscmix-gtk without installing, set the GSETTINGS_SCHEMA_DIR environment variable.

GSETTINGS_SCHEMA_DIR=$PWD/gtk ./gtk/oscmix-gtk

#Web UI

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.

oscmix-web

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 wsdgram

To build oscmix.wasm, you need clang supporting wasm32, wasm-ld, and wasi-libc.

#OSC API

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}/planchan 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.

#Contact

There is an IRC channel #oscmix on irc.libera.chat.