feat(notepat): animated stochastic graphic notation inside drum pads
User: "can the pads have graphics inside representing the mechanism
of stochasticness animated like graphic notation within each pad
while the perc kit is selected".
Each drum's voice stack is now plotted as a compact stochastic-style
score inside its pad whenever percussion is active on that side.
Data: PERCUSSION_NOTATION maps each drum letter to a list of
[waveType, frequency, nominalVolume] triples matching the voices in
playPercussion(). Wave types are 1-char codes:
s = sine (sky blue)
t = triangle (mint)
q = square (amber)
w = sawtooth (orange)
n = noise (pale grey)
Render (in drawGrid):
- When drumActive, walk PERCUSSION_NOTATION[letter] and draw each
voice inside the pad's interior plot area (between the top key
label and the bottom drum label).
- Tonal voices: horizontal line at Y = log-mapped frequency with ±1px
per-frame jitter so it wobbles, thickness ∝ nominal volume.
- Noise voices: vol×8 randomly-scattered 1px dots in a ±5px band
around the log-frequency target, re-scattered each frame.
- Colors come from NOTATION_WAVE_RGB; alpha brighter when the pad is
active (key pressed).
Randomness uses a tiny LCG seeded by (frame + key char code) so every
pad animates independently — you see different jitter patterns across
the 12 pads instead of a lockstep flicker. Log-frequency Y mapping
covers 30 Hz to 10 kHz so the kick's 44/54/90/120/180 Hz stack reads
as a dense bottom band while the hi-hats read as a thin top band.
The bottom drum label (BAS/SNR/CLP/...) is now drawn AFTER the
notation glyph so it sits on top of the graphic. In non-percussion
mode the pads still show note+octave as before — nothing changes for
melodic play.