There's plenty of MIDI I/O already implemented, but that's largely undocumented.
This Pd patch allows to interact, read and set settings, read and set the gesture content and the playhead position:
.
However, there's no CC output currently that mirrors the CV outs, though that wouldn't be hard to enable. I don't have time to do that right now, but with a bit of C++ knowledge it shouldn't be too hard to implement. Otherwise, ping me early next year and I can have a look for you.
This is the base repo: https://github.com/BelaPlatform/gliss-firmware
The starting point for sending midi is in the subrepo: https://github.com/BelaPlatform/trill-neopixel/blob/main/GlissProtocol.cpp . MIDI is received and sent from the main thread, but most of it is processed and generated in the audio thread (see gp_process_incoming() in tr_render() https://github.com/BelaPlatform/trill-neopixel/blob/main/TrillRack.cpp). gp_process_incoming() processes incoming requests and generates a response to send back if appropriate. There's a bidirectional queue between the main and audio thread. In this case, you'd want to send out all the time, not in response to an incoming message, so from within tr_render() you should call msgPushOutgoing() on the appropriate GlissProtocolProcessor (see processors in GlissProtocol.cpp, you may have to make those non-static or provide a function that writes calls the write ). You'd have to throttle writes in order not to saturate the buffers. Start by writing once every 50 calls to tr_render() as a starting point.