Existing Solution:
Lfo’s have a working solution, just snap the y-axis to 12 and modulate global transpose (or individual osc’s) to 12 as well. @MadR made an LFO sequencing tool a while back that demonstrates the concept in a much more advanced way.
Official Implementation (one voice):
As for challenges officially implementing this into the synth:
UI wise, it could all be put in another tab; there’s plenty of padding to put a “SEQ” in the header
Maybe shorten the headings to “OSC”, “FX”, “MOD”, “ADV”…
Backwards compatibility wouldn’t really be a problem, the sequencer would be entirely additive and likely a completely separate process. You can already use an external sequencer with Vital (not per voice) so a Vital sequencer would just act as one of those but built-in.
The file structure also wouldn’t be much of a challenge either. Vital has recently added things like “custom_warps” and “random_seeds” not present in older files. The entirety of the sequencer data would reside under a single tag and could easily be implied for files missing it.
As for the actual programming, it’s just taking the existing MIDI input and transforming it, shouldn’t be too bad–but I haven’t ever worked with midi so I could just be completely wrong.
TLDR; since Vital can already function with an external sequencer, it already has the capability to work with one that would just have to be built in.
Official Implementation (multi-voice):
The previous implementation assumed the sequencer would be one voice and act as a global transpose; I’m assuming this wouldn’t be what people want.
The biggest new challenge with a multi-voice/output sequencer within Vital, would be the need for more complex internal MIDI routing. I’m not 100% sure on how Vitals MIDI works internally, but this would definitely add some complexity. Alternatively, rather than working with the MIDI directly, the sequencer could act as a function of the oscillators pitch, similar to the current LFO solution. The UI could exist in it’s own tab (mentioned above) or be grouped in with the “transpose snap” window:
(this however would demand a rework of the transpose snap window and increase complexity)
As for the sequencer UI itself, it could just be an LFO (similar to the new custom warps) with slightly more advanced editing features (i.e. correct pitch snapping given a range). This would essentially make the current solution streamlined, efficient, and official.
The file structure concerns are essentially the same as the one-voice implementation: all the data would reside in it’s own tag, and backwards compatibility isn’t a problem.
This does have some important limitations though. An LFO pitch-function implementation would remove the ability for proper envelope usage/note off events and make a ‘plucky’ sequence near impossible, or at least really cumbersome. To avoid this, a MIDI routing system would need to be set up to allow for more expression in the seq–this in turn adds the complexity of needing an entire MIDI editor within Vital.
TLDR; Multi-voice sequencer could act as a function of a voices pitch rather than midi input.
More Uses
I suggested a while back that Vital should have customizable previews of patches to show how they’re meant to be used. Having an official sequencer implementation could make this much easier as it could just play the sequence when requested.
Overall, Vital doesn’t need a sequencer; methods exist for the patches that could benefit from one. However, having a sequencer would make Vital a more complete package and give people using the stand-alone without a MIDI keyboard a much smoother experience. At this point, it’s completely up to Tytel to decide if adding a sequencer would be worth the time and effort, but I’d love to see one!