Add note length editing for sustaining already-entered notes
Hold mode only governs entry, so sustaining existing notes previously meant toggling hold on and re-entering them. That works but deletes and recreates each note, silently resetting velocity to the default. L and Shift+L resize the note under the cursor by whole grid cells, editing it in place so velocity, channel and note identity survive. They are independent of hold mode, so there is no state to set up or unset. Alt+J fuses a whole run of repeated notes at one pitch in a single keystroke. Lengthening absorbs same-pitch notes it runs into, taking their tail if longer, so growing across a repeated run fuses it instead of creating overlaps. Also makes noteEndingAt/noteStartingAt public and fixes their two call sites in toggleCell, which would otherwise have been nil-call errors in hold mode.
This commit is contained in:
@@ -72,6 +72,8 @@ actions by hand in Actions → Show action list. That always works.
|
||||
| `Left` / `Right` | Cursor back / forward one grid cell | OSARA previous / next chord |
|
||||
| `Up` / `Down` | Pitch up / down one scale degree | OSARA higher / lower note in chord |
|
||||
| `Enter` | Toggle note at cursor cell | Edit: Event properties |
|
||||
| `L` / `Shift+L` | Lengthen / shorten note by one cell | Edit: Lengthen / shorten notes one grid unit |
|
||||
| `Alt+J` | Join a run of repeated notes into one | — |
|
||||
| `Alt+3` | Toggle diatonic triad on cursor pitch | — |
|
||||
| `Alt+7` | Toggle diatonic seventh chord | — |
|
||||
| `Alt+Shift+Up` / `Alt+Shift+Down` | Velocity up / down | — |
|
||||
@@ -115,6 +117,36 @@ it into one sustained note. Toggling a cell off in the middle of a sustained
|
||||
run splits it in two; at either end, it shortens it. So you can draw a long
|
||||
note by arrowing right and pressing Enter across several cells.
|
||||
|
||||
Hold mode governs **entry only** — it never retroactively merges notes that
|
||||
are already there. To sustain what you have already written, use the length
|
||||
keys below.
|
||||
|
||||
## Note length — sustaining notes you already entered
|
||||
|
||||
- **`L`** — lengthen the note under the cursor by one grid cell.
|
||||
- **`Shift+L`** — shorten it by one cell. It never shrinks below a single
|
||||
cell; it says *"minimum"* rather than deleting the note.
|
||||
- **`Alt+J`** — fuse an entire run of repeated notes at this pitch into one
|
||||
sustained note, in a single keystroke.
|
||||
|
||||
Lengthening **swallows** any same-pitch note it runs into, taking that note's
|
||||
tail if it reached further. So pressing `L` across a row of repeated notes
|
||||
fuses them rather than producing overlaps.
|
||||
|
||||
Each press reports the resulting length — *"E5, 3 cells"*, or *"E5, 2 cells,
|
||||
joined 1"* when it absorbed something.
|
||||
|
||||
### Why not re-toggle with hold on instead?
|
||||
|
||||
Turning hold on and re-entering existing notes does work. But toggling a note
|
||||
off and on **deletes and recreates it, resetting its velocity to the default**
|
||||
— if you have shaped dynamics, that quietly discards them.
|
||||
|
||||
The length keys edit the note in place, so velocity, channel and note identity
|
||||
survive. They also need no mode: `L` behaves identically whether hold is on or
|
||||
off, so there is no state to set up beforehand and none to remember to turn
|
||||
off afterwards.
|
||||
|
||||
## Chords
|
||||
|
||||
`Alt+3` stamps a **diatonic triad** on the cursor pitch; `Alt+7` a seventh
|
||||
|
||||
Reference in New Issue
Block a user