I’d like to use IanniX over MIDI to get access to the wide range of sounds from the huge number of available MIDI synths. From what I can see IanniX has very limited support for controlling the parameters of MIDI messages based on the score state variables.
This is interesting, but the triggers have static MIDI notes assigned to them. It would be interesting to be able to control note number, controllers, pitch bend, program change, etc with parameters from the score.
In fact I was able to do this in a limited manner using setBoundsSource and setBoundsTarget to remap some parameter into the 0..127 range of MIDI variables, and then assigning that parameter to, say note number. But this is unintuitive and hard to control.
Is there any better way to do this? For example, to use cursor position to control the MIDI note number or data sent to a MIDI CC?
I realize this would be possible by sending the parameters via OSC to say Max, transforming them and sending them to MIDI, but this would involve too many applications for my liking.
If there is currently no way to do this in IanniX, I have several ideas on how it might be added and I may have a go at modifying the source code to support it. Also from what I can see IanniX does not currently support sending pitch bend or program change so I may add those too.
Note that I’m also very interested in using OSC to directly to control Supercollider, but for some projects I need easier access to the conventional instrument sounds that are available from MIDI synthesizers.
I’ve make one small change so far: I added support for a new parameter, trigger_distance that can be used in the construction of messages just like the other parameters. It’s computed based on the distance between the cursor position and the trigger position when the trigger fires. This seems to be working fine.
These embedded functions may provide both the equivalent of Geomaestro’s “distortion functions” as well as a way to scale values to fit the MIDI range.
From what I can tell, adding this feature would mainly involve extensions to the Parse() function in the C++ code, as a preprocessing stage before normal parsing.
This would also make message specification expressions longer and may require going to a line-wrapping format for the message editor. The field in this editor needs to be larger anyway as it’s hard to see the underlines in the variable names.
Anyway, I’m going to play with these Ideas and see what I can come up with.