OTTO icon indicating copy to clipboard operation
OTTO copied to clipboard

Sequencer Implementation

Open jmidt opened this issue 5 years ago • 2 comments

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?
    • [ ] Global
      • [ ] 1. Tempo / swing
      • [ ] 4. Sequence length
  • [ ] 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 own Sends
    • [ ] 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.

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] Future extensions
    • [x] "Subscribe" to clock "events", i.e. handle every 16th etc.
      • Done by checking data.clock.contains_multiple, data.clock.count_multiple and data.clock.position_of_multiple
    • [ ] GFI swing

jmidt avatar Aug 12 '19 12:08 jmidt

I added a small point about switching to a sampler track automatically when pressing either sequencer or sampler button.

jmidt avatar Aug 15 '19 08:08 jmidt

Added a point about the file handling. This should be done in the sequencer.

jmidt avatar Aug 19 '19 10:08 jmidt