The point of posting (as if one were needed
Basically, it's got to be modular, with good partitioning between the UI and underlying processing. This description explicitly does not cover complex UI design, such as piano roll editing. It's more concerned with the fundamental relationships below whatever UI is put in place. I would sum up the UI side by saying merely "it must be comfortable to use". Ideally, the UI would be pluggable, anyway.
MIDI input module (attaches to an OS-level MIDI input)
starts off with three outputs:
- 5 pin MIDI out port (virtual!)
- CV connector
- Trigger connector
- Allows full MIDI data stream to be fed to another unit (with a MIDI In connector)
- Maybe allows MIDI data stream to be filtered in various ways
(e.g.s: just send Ch 1 note data; send everything but Ch 16 CCs and SysEx) - MIDI OX-like transforms would definitely be done in an MFX module, not here
- anything wanting "raw" MIDI would take this data rather than trigger/CV data
- i.e. a note data source (Note On, note number, velocity)
- Bundle Tune Request, Timing Clock, Start, Continue, Stop, Active Sensing and Reset messages in here?
- Note off explicitly "closes the gate"; allow a gate time to be set, too; allow either to take priority
- source specified as either single channel or ignore channel
- do transforms here or in a trigger transform module?
- i.e. an "automation" source, scaled to 0..1
- source specified as MIDI message type (Poly Aftertouch, CC/RPN/NRPN, Program Change(?), Chan Aftertouch, Bend)
- also allow Note data as CV source
- Bundle Song Position Pointer and Song Select messages in here? ("You don't have to use them...")
- either single channel or ignore channel
- controller curves (i.e. specific point-to-point mapping from CC etc to 0..1 range)?
Audio Input module (attaches to an OS-level audio input)
starts off with one audio out connector for each audio channel
Audio out connector
- single channel audio signal
- maybe have "fat" connectors for multi-channel (e.g. 7.2) signals
- can't think of any "selection" criteria beyond specifying which channel...
- resampling should be a module? Or done here? Here I suppose.
Connectors
This describes some general behaviours.
In connectors
- shouldn't need any parameters
- this may mean pushing back things like "target MIDI channel" onto an out connector (or a mapper module), if needs be
- only allow one cable to be connected (require merge/mix modules)
- Plugging a virtual cable into any of the outputs causes another of that output to appear.
- option to group the connectors and just have a whole bunch of cables? (Only if all parameters are the same for all cables)
Transform modules
- Have specified inputs and outputs (i.e. based on "published" interface)
- option to configure any CVs to be knobs, sliders or buttons, setting low and high values (0..1)
- Clearly, VST, VSTi, DX, DXi, ReWire, JACK and so on are going to be modules with appropriate connectors. Nuff said.
- Audio, MIDI, CV and trigger units with various behaviours
- "sequencer" is a UI module that "plays" sequences
- "sequence" is one of audio, MIDI, CV or trigger
- all knobs, sliders and buttons have a CV and/or trigger input
- "mixer" is a UI module containing "channel" modules
- "channel" is a UI module containing a "module rack" module plus the usual controls (pan, volume, mute, solo)
- "module rack" short-cuts some wiring up, assuming modules inserted are to be used as effects (audio taking priority over midi if there's ambiguity)
The sequencer changes which sequence(s) is(are) active, hence its own outputs change.
CV Sequence module
- the basic unit of automation
- Mmm..?
- attach to OS-level outputs
- simple, like in connectors (which is all they present)
Some cool built in stuff just for fun:
Audio to CV and trigger modules
- takes (VLF) audio channel and turns it into a CV or trigger (this isn't pitch to Note, more like what the drumKAT inputs do)
- this is takes an audio channel and tries to extract pitch information and present it as MIDI Note triggers
- e.g. CV to trigger: get that CC4 to velocity-sensitive Hihat working!
- auto pitch bend between notes..?
- some magic way to do really complex stuff...
***Need some way of automating routing***
*****************************************