{"id":18787207,"url":"https://github.com/michaelforney/oscmix","last_synced_at":"2025-09-13T16:51:59.481Z","repository":{"id":220601254,"uuid":"742960653","full_name":"michaelforney/oscmix","owner":"michaelforney","description":"Mixer for RME Fireface UCX II","archived":false,"fork":false,"pushed_at":"2025-05-31T04:12:35.000Z","size":455,"stargazers_count":47,"open_issues_count":11,"forks_count":8,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-05-31T15:54:00.217Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michaelforney.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-01-13T22:01:41.000Z","updated_at":"2025-05-31T04:12:16.000Z","dependencies_parsed_at":"2024-02-28T22:28:57.526Z","dependency_job_id":"0e9cabca-4c91-404c-9362-f55dc5fd547f","html_url":"https://github.com/michaelforney/oscmix","commit_stats":null,"previous_names":["michaelforney/oscmix"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/michaelforney/oscmix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelforney%2Foscmix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelforney%2Foscmix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelforney%2Foscmix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelforney%2Foscmix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michaelforney","download_url":"https://codeload.github.com/michaelforney/oscmix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelforney%2Foscmix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274996605,"owners_count":25387926,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-13T02:00:10.085Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T20:53:52.895Z","updated_at":"2025-09-13T16:51:59.469Z","avatar_url":"https://github.com/michaelforney.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# oscmix\n\n[![builds.sr.ht status](https://builds.sr.ht/~mcf/oscmix/commits/main.svg)](https://builds.sr.ht/~mcf/oscmix/commits/main)\n\noscmix implements an OSC API for RME's Fireface UCX II running in\nclass-compliant mode, allowing full control of the device's\nfunctionality through OSC on POSIX operating systems supporting USB\nMIDI.\n\n## Current status\n\nMost things work, but still needs a lot more testing, polish,\ncleanup. Some things still need to be hooked up in the UI or\nimplemented in oscmix.\n\n### Supported devices\n\n- RME Fireface UCX II\n\n## Usage\n\n```\noscmix [-dl] [-r recvaddr] [-s sendaddr]\n```\n\noscmix reads and writes MIDI SysEx messages from/to file descriptors\n6 and 7 respectively, which are expected to be opened.\n\nBy default, oscmix will listen for OSC messages on `udp!127.0.0.1!7222`\nand send to `udp!127.0.0.1!8222`.\n\nSee the manual, [oscmix.1], for more information.\n\n[oscmix.1]: https://michaelforney.github.io/oscmix/oscmix.1.html\n\n## Running\n\n### Linux\n\nOn Linux systems, you can use bundled `alsarawio` program open and\nconfigure a given raw MIDI subdevice and set up these file descriptors\nappropriately.\n\nTo determine your MIDI device, look for it in the output of `amidi -l`\n(the one ending in `,1` with the name `Fireface UCX II`).\n\nFor example:\n\n```sh\nalsarawio 2,0,1 oscmix\n```\n\nThere is also a tool `alsaseqio` that requires alsa-lib and uses\nthe sequencer API.\n\nTo determine the client and port for your device, find it (port 1\nof the Fireface UCX II) in the output of `aconnect -l`.\n\nFor example:\n\n```sh\nalsaseqio 24:1 oscmix\n```\n\n### BSD\n\nOn BSD systems, you can launch oscmix with file descriptors 6 and\n7 redirected to the appropriate MIDI device.\n\nFor example:\n\n```sh\noscmix 6\u003c\u003e/dev/rmidi1 7\u003e\u00266\n```\n\n## GTK UI\n\nThe [gtk](gtk) directory contains oscmix-gtk, a GTK frontend that\ncommunicates with oscmix using OSC.\n\n![oscmix-gtk](https://mforney.org/misc/oscmix.png)\n\nTo run oscmix-gtk without installing, set the `GSETTINGS_SCHEMA_DIR`\nenvironment variable.\n\n```sh\nGSETTINGS_SCHEMA_DIR=$PWD/gtk ./gtk/oscmix-gtk\n```\n\n## Web UI\n\nThe [web](web) directory contains a web frontend that can communicate\nwith oscmix through OSC over a WebSocket, or by directly to an\ninstance of oscmix compiled as WebAssembly running directly in the browser.\n\n![oscmix-web]\n\nThe web UI is automatically deployed at\n[https://michaelforney.github.io/oscmix](https://michaelforney.github.io/oscmix).\n\nIt is tested primarily against the chromium stable channel, but\npatches to support other/older browsers are welcome (if it doesn't\ncomplicate things too much).\n\nAlso included is a UDP-to-WebSocket bridge, `wsdgram`. It expects\nfile descriptors 0 and 1 to be an open connection to a WebSocket\nclient. It forwards incoming messages to a UDP address and writes\noutgoing messages for any UDP packet received. Use it in combination\nwith software like [s6-tcpserver] or [s6-tlsserver].\n\n```sh\ns6-tcpserver 127.0.0.1 8222 wsdgram\n```\n\nTo build `oscmix.wasm`, you need `clang` supporting wasm32, `wasm-ld`,\nand `wasi-libc`.\n\n[oscmix-web]: https://github.com/michaelforney/oscmix/assets/52851/ef22e75e-9d38-4c82-b016-81bce77be571\n[s6-tcpserver]: https://skarnet.org/software/s6-networking/s6-tcpserver.html\n[s6-tlsserver]: https://skarnet.org/software/s6-networking/s6-tlsserver.html\n\n## OSC API\n\nThe OSC API is not yet final and may change without notice.\n\n| Method | Arguments | Description |\n| --- | --- | --- |\n| `/input/{1..20}/mute` | `i` enabled | Input *n* muted |\n| `/input/{1..20}/fxsend` | `f` db (-65-0) | Input *n* FX send level |\n| `/input/{1..20}/stereo` | `i` enabled | Input *n* is stereo |\n| `/input/{1..20}/record` | `i` enabled | Input *n* record enabled |\n| `/input/{1..20}/playchan` | `i` 0=off 1-60 | Input *n* play channel |\n| `/input/{1..20}/msproc` | `i` enabled | Input *n* M/S processing enabled |\n| `/input/{1..20}/phase` | `i` enabled | Input *n* phase invert enabled |\n| `/input/{1..4}/gain` | `f` 0-75 (n=1,2) 0-24 (n=3,4) | Input *n* gain |\n| `/input/{1..2}/48v` | `i` enabled | Input *n* phantom power enabled |\n| `/input/{3..8}/reflevel` | `i` 0=+4dBu 1=+13dBu 2=+19dBu | Input *n* reference level |\n| `/durec/status` | `i` | DURec status |\n| `/refresh` | none | **W** Refresh device registers |\n| `/register` | `ii...` register, value | **W** Set device register explicitly |\n\n**TODO** Document rest of API. For now, see the OSC tree in `oscmix.c`.\n\n## Contact\n\nThere is an IRC channel #oscmix on irc.libera.chat.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelforney%2Foscmix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaelforney%2Foscmix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelforney%2Foscmix/lists"}