MAIN GOAL: Plan out work for MIDI transformation VC or whatever it is we're working on.
I'll be honest, the motivation behind this is that I want to try out Svelte. I've been reading tutorials on it and I've not really tried out something completely new like this in quite a while, and I think it would be good. Given that motivation, I tried to think of some kind of web synth module that I could build with Svelte - something relatively self-contained that I could use to test it out in a somewhat limited fashion. I have had some kind of vague desire to build nodes that process and re-emit MIDI events for some time, and I will try to build that now.
I think that the main base functionality I want to provide is quantization of random/arbitrary input signals into MIDI notes or scales. Considering if this would be better as a graph editor node or a full VC, I think that a graph editor node will suffice - at least for this quantization functionality. Rather than grouping a bunch of different MIDI functionalities into a single node - especially if the input/output shape changes between them - I think that having a variety of well-named nodes is better. Component-level functionality re-use will suffice for that.
So - for this [midi-quantizer-node]. What will it look like, and what will the UI look like?
We will have one number input node and one MIDI output node. We can implement the logic in an AWP with Rust like usual.
The bare essentials UI is an input range selector so that the min and max expected input values can be defined. We then need a way to determine the output range and pick which notes are active within it. Perhaps it can just be octave-based to start with. We have a slider to set how many octaves you want --
I ended up building out a working version of this - with Svelte and everything. It has the keyboard, it has octave select, connectables are working, the engine works, everything is good. I also built a normal non-MIDI quantizer mode which is generally useful.