-
Notifications
You must be signed in to change notification settings - Fork 47
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JACK MIDI/OSC/CV backend #30
Comments
Hi, that sounds very interesting indeed! Could you point me to some documentation on the subject? :) |
In the LV2 spec:
JACK client/LV2 host commits: Conversion:
Plugins with support:
If you're on IRC, I'd highly recommend #lad for audio and related dev chat. |
I'll just do a braindump here for further reference, anyone is welcome and encouraged to comment corrections :) So from my reading of the linked specs and then some, the LV2 side would concern only communication between an LV2 plugin host (such as Carla) and the actual plugin. Since I don't think the MIDIMonster should become a full-blown LV2 plugin host (I'd rather keep with only dealing with control data, not audio, much less realtime audio), we're concerned with how to connect the MIDIMonster to plugin hosts to supply control data. Now I have not actually used any of these projects (except for a limited JACK setup), as I'm mostly coming from the lighting & show control side of things, but from reading some of the Carla code, it has native support for OSC control input, which is already supported by the MIDIMonster, as well as MIDI control input via JACK. There is also somewhat of a non-standard to transmit OSC via JACK midiports, which ingen seems to support but Carla does not. Instead Carla uses JACK ports to transfer CV data (the format of which I don't yet fully understand, but from reading a note on the JACK homepage it might actually just be DC offset samples at audio rate which would fit with my understanding of old hardware synthesizers as the origin of the CV mechanism). This mechanism might also work for ingen (which also connects to JACK for CV inputs of some to-be-determined form). A generic plugin adapting MIDIMonster data to JACK ports (MIDI, MIDI/OSC, CV) would probably be the best interface for these use cases. |
See also this thread in relation to CV and the synthpod host. Also, a wee note that there have been newer alternative JACK+OSC developments. |
So from reading a lot of ingen code, it seems the CV data transported via JACK audio ports consists of float32 samples, what I'm currently missing is some kind of upper/lower limit for the values, or any info on how they are interpreted by the plugins themselves. |
At least on the LV2 plugin side, this seems to be set by the Host as properties on the incoming port (?). So the next idea is to figure out what these are usually set to by hosts (or to just make it configurable in the backend). @mxmilkb: Are these limits configurable in the UI of Carla or ingen? |
It appears the various (older) plugins that I linked to above are -1 min to 1 max. @falkTX noted in #jack earlier: "there is no predefined range. we usually just go with 1.0f = 1v". I think that comment relates to the newer MOD CV plugins. I don't think those are openly available yet though(?). I guess they use the Eurorack/VCV convention of 0 to 10 for unipolar / -5 to 5 for bipolar. Awaiting confirmation on that. |
falkTX says there is no convention among the newer MOD CV plugins. They will be GPLd after getting free artwork. |
Thanks for the feedback, so I gather the values are unitless (and dimensionless) until they arrive at the plugin itself. I'll just make the range configurable in the backend instance configuration :) |
I just pushed an implementation that seems to work for my test cases, though I have only tested with basic MIDI and CV transport yet. I may look into testing with a basic LV2 setup some time, but any feedback would be much appreciated :) The backend should work both on Linux and OSX, documentation is available in the usual place. I've left out OSC for the time being, as I didn't want to duplicate the parsing code from the OSC backend. |
Marking this issue closed, as the backend is implemented and seems to do its job, but further discussion is welcome :) |
Both JACK and LV2 format have CV signal mechanisms that allow for finer automation than MIDI can support.
carla-git recently introduced internal CV ports, added a CV search filter in the plugin dialog, and will in future expose parameters as CV ports, and zrythm-git has just received CV functionality.
CV support in MIDIMonster would be very handy.
The text was updated successfully, but these errors were encountered: