OTTO
OTTO copied to clipboard
Sequencer Implementation
Sequencer
The sequencer controls the 8 samplers. When editing the sequencer steps, the musical keyboard keys change to change sampler (black keys) and edit steps (white keys). Features are below, with those already implemented marked with a check mark. GFI marks something suitable for a newcomer to get started on.
- [ ] Tempo (controls global clock)
- [ ] Start/stop (controls global clock)
- [ ] Sequencer screen
- [ ] Per-trigger settings
- [ ] 3. conditional trigs
- [ ] Chance / 2 in 4 etc
- [ ] Draw 2 in 4 as ○ ● ○ ○
- [ ] Single encoder, turn CW for X in Y, CCW for chance
- [ ] 2. velocity
- [ ] parameter locks?
- [ ] 3. conditional trigs
- [ ] Global
- [ ] 1. Tempo / swing
- [ ] 4. Sequence length
- [ ] Per-trigger settings
- [ ] Elegant solution for substeps
- [ ] Ratchets/Retriggers?
- [ ] Finite list of selectable combinations
- [ ] Full access to individual substeps with led "zoom"
- [ ] Move file handling out to the Sequencer, from the individual Samplers.
- [x] Mutes
- [ ] 5. Sends for samplers
- [ ]
Sampler
objects own their ownSends
- [ ]
Sequencer::sends_screen()
to get
- [ ]
- [ ] 6. Variations
- [ ] 1 base sequence, 4 variations, of which zero or one can be active at any time
- [ ] variations are "diffs", i.e. only contain changes to the base sequence, not a copy of the base sequence
- [ ] variations can be
- [ ] queued for the next "round" (click)
- [ ] switched on instantly and held with a momentary switch (shift + click)
- [ ] queued and enabled for all future rounds
- [ ] switched on instantly and kept on
- [ ] step-toggles in variations have three states: on, off, "as in base"
- [ ] Future extensions:
- [ ] Longer sequences than 16 steps.
- [ ] Pages? +/- could be reused to switch pages
- [ ] GFI Long press (or press and encoder turn) does not toggle step
- [ ] Choke groups
- [ ] Mute groups
- [ ] Parameter locks
- [ ] Only sampler and sends props need to be lockable
- [ ] Velocity view - view velocity on LEDs.
- [ ] Longer sequences than 16 steps.
Global clock
- [x] Count microsteps (192?) with an unsigned int
- [x] clock range in ProcessData (last time, current time)
- [x] check if the desired step is in clock range
- [x] Sent from engine manager
- [x] Control through separate ClockManager
- [x]
void start()
,void stop(bool reset = true)
,void reset()
- [x]
float bpm()
- [x]
- [x] Future extensions
- [x] "Subscribe" to clock "events", i.e. handle every 16th etc.
- Done by checking
data.clock.contains_multiple
,data.clock.count_multiple
anddata.clock.position_of_multiple
- Done by checking
- [ ] GFI swing
- [x] "Subscribe" to clock "events", i.e. handle every 16th etc.
I added a small point about switching to a sampler track automatically when pressing either sequencer or sampler button.
Added a point about the file handling. This should be done in the sequencer.