Hold, chord memory and the sustain pedal #11

Closed
opened 2026-10-12 02:40:06 +00:00 by bcox · 3 comments
Owner

Not done on any instrument, and listed as not done for several: the OB-X's hold and chord, the Juno's hold (controller 64), the DW-8000's controller 64, the SH-101's hold, and the Poly-800's hold and chord memory.

  • Sustain pedal: MIDI controller 64. engine/midi.h is shared by every instrument, so this is one piece of work for all of them: keys released while the pedal is down stay held until it comes up.
  • Hold: the panel button that does the same without a pedal.
  • Chord memory: one key plays a remembered chord, transposed.

Things to settle:

  • Where it lives. engine/player.h already sits between the keys and the synth, for the arpeggiator and the zones, which suggests there.
  • How it meets the arpeggiator's own latch (arp.latch), and zones.
  • Whether hold and the chord are settings of the patch, as the arpeggiator's are.
Not done on any instrument, and listed as not done for several: the OB-X's hold and chord, the Juno's hold (controller 64), the DW-8000's controller 64, the SH-101's hold, and the Poly-800's hold and chord memory. - **Sustain pedal**: MIDI controller 64. `engine/midi.h` is shared by every instrument, so this is one piece of work for all of them: keys released while the pedal is down stay held until it comes up. - **Hold**: the panel button that does the same without a pedal. - **Chord memory**: one key plays a remembered chord, transposed. Things to settle: - Where it lives. `engine/player.h` already sits between the keys and the synth, for the arpeggiator and the zones, which suggests there. - How it meets the arpeggiator's own latch (`arp.latch`), and zones. - Whether hold and the chord are settings of the patch, as the arpeggiator's are.
Author
Owner

On the SEM family the pedal is to be a choice of three in the patch, by Ben's word on 2026-10-12: nothing, sustain, or hold.

Today controller 64 there is the Oberheims' sustain footswitch, a longer release, for a sound with env.pedal on, and nothing otherwise. On the OB-Xa and OB-8, HOLD is a different footswitch at a different jack, so "controller 64 holds keys on every instrument" would take the sustain footswitch away. So when hold is built here, mini-SEM gets one setting with three positions in place of env.pedal's switch, a stored patch with env.pedal on reading as sustain. Issue #31 can later give each footswitch a controller of its own.

Hold was done for the Juno on 2026-10-12, as the DW-8000's voice.hold, and the pedal's bookkeeping for an instrument with no zones is now engine/damper_pedal.h.

**On the SEM family the pedal is to be a choice of three in the patch**, by Ben's word on 2026-10-12: nothing, sustain, or hold. Today controller 64 there is the Oberheims' sustain footswitch, a longer release, for a sound with `env.pedal` on, and nothing otherwise. On the OB-Xa and OB-8, HOLD is a different footswitch at a different jack, so "controller 64 holds keys on every instrument" would take the sustain footswitch away. So when hold is built here, mini-SEM gets one setting with three positions in place of `env.pedal`'s switch, a stored patch with `env.pedal` on reading as sustain. Issue #31 can later give each footswitch a controller of its own. Hold was done for the Juno on 2026-10-12, as the DW-8000's `voice.hold`, and the pedal's bookkeeping for an instrument with no zones is now `engine/damper_pedal.h`.
Author
Owner

Hold and the pedals are done, on main at 3721c04, to docs/superpowers/specs/2026-10-14-hold-and-pedals-design.md:

  • Controller 64 is hold on every instrument (the Poly-800, SH-5 and SH-101 included), in the shared player (engine/pedals.h, engine/player.h), ahead of the arpeggiator. 66 is sostenuto.
  • Each instrument's own footswitch moved: 69 for the SEM family's sustain, the Prophets' release, the Omni's sustain, the Quadra lead's HOLD/FLAT, the 2600's interval latch and the MS-20's momentary switch; 65 for the Odyssey's and the Quadra lead's portamento.
  • --hold-cc, --sostenuto-cc, --sustain-cc and --portamento-cc on every daemon, minisuited, the renderers and the plugins (flags file); 0 is off.
  • A HOLD button: hold on|off in the protocol, a Hold box in the page's header. Not stored in a patch.
  • voice.hold retired (old lines load and are ignored); zone.hold kept.

Chord memory is not done and stays open here.

Hold and the pedals are done, on main at 3721c04, to `docs/superpowers/specs/2026-10-14-hold-and-pedals-design.md`: - Controller 64 is hold on every instrument (the Poly-800, SH-5 and SH-101 included), in the shared player (`engine/pedals.h`, `engine/player.h`), ahead of the arpeggiator. 66 is sostenuto. - Each instrument's own footswitch moved: 69 for the SEM family's sustain, the Prophets' release, the Omni's sustain, the Quadra lead's HOLD/FLAT, the 2600's interval latch and the MS-20's momentary switch; 65 for the Odyssey's and the Quadra lead's portamento. - `--hold-cc`, `--sostenuto-cc`, `--sustain-cc` and `--portamento-cc` on every daemon, minisuited, the renderers and the plugins (flags file); 0 is off. - A HOLD button: `hold on|off` in the protocol, a Hold box in the page's header. Not stored in a patch. - `voice.hold` retired (old lines load and are ignored); `zone.hold` kept. Chord memory is not done and stays open here.
Author
Owner

Chord memory, the last part of this issue, is done in 0f88240, to docs/superpowers/specs/2026-10-16-chord-memory-design.md: engine/chord_memory.h, one for each zone in the player after the pedals and ahead of the arpeggiator, on every instrument; controller 67 (--chord-cc=N, 0 for none) in the daemons, minisuited and the renderers, not the plugins; the protocol's chord set|on|off and chord, with a chord off / chord on 0 4 7 line on change and on connecting (version still 4); a Chord button beside Hold on the page; and the suite keeping the chord across a selection. Hold and the pedals were done before. Not yet played by anyone. Closing.

Chord memory, the last part of this issue, is done in 0f88240, to docs/superpowers/specs/2026-10-16-chord-memory-design.md: engine/chord_memory.h, one for each zone in the player after the pedals and ahead of the arpeggiator, on every instrument; controller 67 (`--chord-cc=N`, 0 for none) in the daemons, minisuited and the renderers, not the plugins; the protocol's `chord set|on|off` and `chord`, with a `chord off` / `chord on 0 4 7` line on change and on connecting (version still 4); a Chord button beside Hold on the page; and the suite keeping the chord across a selection. Hold and the pedals were done before. Not yet played by anyone. Closing.
bcox closed this issue 2026-10-16 20:25:27 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bcox/mini-800#11
No description provided.