Please enable JavaScript.
Coggle requires JavaScript to display documents.
EPQ Coding Planning (Plugins (Very Low Latency modules (Octave coupler …
EPQ Coding Planning
Plugins
Very Low Latency modules
Arpeggiator
Single module (adjust delay for arpeggio)
Select key
select type (type list from
https://www.edmprod.com/different-chord-types/
)
Major
Minor
Melodic
ascending 1 2 ^ b3 4 5 6 7 ^ 1
descending 1 2 ^ b3 4 5 ^ b6 b7 1
Harmonic 1 2 ^ b3 4 5 ^ b6 7 ^ 1
Natural
Diminished
Major Seventh
Minor Seventh
Dominant Seventh
Suspended
Augmented
Extended
type chosen by either
holding enough notes for auto recognition? (hard to code!?)
Setting it in menu
Modes
These are different starting positions for major scales
So will have to handle these
Types:
Ionian
Dorian
Phrygian
Lydian
Mixolydian
Aeolian
Locrian
Work out notes to play
Need to convert from note no. to note name, or perhaps notes within a key?
Object storing note assignments
2D vector storing scales
1 more item...
in utility source file / header
2D vector storing note patterns from root for each type of chord
1 more item...
Vector storing note names (index as key number)
Auto chord
Octave coupler :check:
Choose direction / destination :check:
Press
signal to press same key as user +- x octaves :check:
Release
Signal to release same key as user +- x octaves :check:
Loop pedal
Metronome
MIDI controller mode
Use section with no active reeds
Separate MIDI channel
Read stop positions
Stop preset buttons
Recording
Hold preset button for x seconds to record:question:
Separate button to save current positions? :question:
Move stops manually
Receive stop positions and save
Activation
Change MIDI output instrument
Send signal to Move the stops
Held or toggled?
A setting?
Core functionality
Receive MIDI input
Interpret MIDI input
Handling MIDI instruments :check:
MIDI not arranged for this machine
Choose which track(s) to output :check:
Handling the same key pressed by different channels :!?:
Default instrument :check:
MIDI arranged for this machine
Using the different instruments as presets for all possible stop positions :check:
Option to enable this mode? :!?:
Handle notes outside range
Shift octave if possible?
Ignore them
Release key filtering :check:
Only release keys not pressed by plugins :check:
Send signals to press/release keys
link to check:
Receive keypresses
Filtering
Sort into keypresses by the system and by the user :check:
System keypresses :check:
Ignore system keypresses for internal functions :check:
Choose whether to output to MIDI :
Possibly split to alternate channel :question:
User keypresses :check:
Array or vector storing state :check:
3 states: off/userOn/systemOn :green_cross:
Or 2 variables per key: state (on/off) and operator (system/specific plugin or user) :green_cross:
management for when multiple sources use the same key :check:
separate array/vector acting as buffer for each key :check:
Each module (each MIDI input or plugin) that asks for the key to be pressed adds to the buffer when it wants note on, removes when it wants note off :check:
So long as buffer >=1 key stays pressed :check:
Ignore very short presses? :question: :!?:
Receive stop positions
Convert to instrument(s) :check:
Convert to MIDI format
Output MIDI :
Separate channels? :green_cross:
Single channel using an instrument representing the current stop arrangement? :check:
Output to plugins :check:
Timing
Schedule storing actions occurring on a delay :check:
Constantly checking schedule
Multithreading :green_cross:
Communicating with hardware
MIDI input
Use the C++ MIDI library
Receiving signals from keys and stops
Using multiplexers, breakout boards or shift registers
MIDI output
Use C++ midi library
Controls / interface
LCD
Rotary encoders