|
| | DrumKeyOverrides () |
| bool | is_empty () const noexcept |
| | Whether any override has been recorded.
|
| void | reset () noexcept |
| | Clears every override.
|
| void | set_pitch (int note, int entry) noexcept |
| | Records a coarse-pitch override for one key; centre is no change.
|
| void | set_pan (int note, int entry) noexcept |
| | Records a panpot override for one key, used directly as the key's pan.
|
| void | set_play_key (int note, int entry) noexcept |
| | Records an absolute play-key override for one key, from drum-setup SysEx 41 m1 kk.
|
| void | set_level (int note, int entry) noexcept |
| | Records a level override for one key, replacing the kit's level plane entry.
|
| void | set_group (int note, int entry) noexcept |
| | Records an assign-group override for one key.
|
| void | set_reverb (int note, int entry) noexcept |
| | Records per-key send depths, from NRPN 1D/1E/1F or drum-setup SysEx.
|
| void | set_chorus (int note, int entry) noexcept |
| void | set_delay (int note, int entry) noexcept |
| void | set_rx_note_off (int note, bool on) noexcept |
| | Records the per-key receive switches, from drum-setup SysEx 41 m7 kk / 41 m8 kk.
|
| void | set_rx_note_on (int note, bool on) noexcept |
| int | pitch_offset (int note) const noexcept |
| | The coarse-pitch offset held for a key, in kit-plane steps.
|
| std::optional< int > | pan (int note) const noexcept |
| | The panpot held for a key, or nothing when the key follows its kit record.
|
| std::optional< int > | play_key (int note) const noexcept |
| | The absolute play-key override for a key, or nothing when it follows the kit.
|
| std::optional< int > | level (int note) const noexcept |
| | The level override for a key, or nothing when it follows the kit.
|
| std::optional< int > | group (int note) const noexcept |
| | The assign-group override for a key, or nothing when it follows the kit.
|
| std::optional< bool > | rx_note_off (int note) const noexcept |
| | The receive-switch overrides for a key, or nothing when it follows the kit.
|
| std::optional< bool > | rx_note_on (int note) const noexcept |
| std::optional< int > | pan_for_hit (int note, EngineNoise &noise) const |
| | Resolves the panpot for one strike, spreading a randomly-panned key.
|
Per-part coarse-pitch and panpot overrides, set by NRPN.
Drum keys only: a melodic part never reaches these.
| std::optional< int > ts::DrumKeyOverrides::pan_for_hit |
( |
int | note, |
|
|
EngineNoise & | noise ) const |
|
nodiscard |
Resolves the panpot for one strike, spreading a randomly-panned key.
The spread is the engine's own: a draw from the shared generator, reduced to a pan position by its top seven bits. What still cannot match is the sequence under polyphony, since that depends on how many voices consume draws and in what order.
Consumes a draw for a randomly-panned key, so call it once per strike.
| DrumKey ts::DrumKeyOverrides::apply |
( |
DrumKey | key, |
|
|
int | pitch_offset, |
|
|
std::optional< int > | pan ) |
|
staticnodiscardnoexcept |
Layers a latched pair of overrides over a key read from the kit record.
The offset lands on the plane unscaled and the sum clamps to 0-0x7F, which is the engine's own plane write (nrpn_apply case 0x18, confirmed by live plane reads: entry +12 moves the stored plane 60 to 72 on every map). The "absolute rate floor" measured but never located in earlier work is this clamp's bottom: keys with different kit planes floor at different offsets, which is what made it look like a rate limit rather than a pitch one.