slab/menuband: 0.6 — voice palette LCD + qwerty map + dark mode
Voice palette
- Voice title typeset in YWFT Processing Bold (bundled in
Resources/, registered at launch via CTFontManagerRegisterFontsForURL).
Adapts text color + drop shadow per appearance — dark voices brighten
in dark mode, light voices darken in light mode, with a contrast
shadow always present so the title pops on any backdrop.
- Held notes are floating boxes (no surrounding bezel), centered above
the visualizer in the voice's family color. Reserved row stays put
when no notes are held so the layout doesn't wobble.
- Voice-number subscript on the menubar music-note icon: tiny digits
in the bottom-right corner, first digit anchored at the corner,
multi-digit values flow rightward into a reserved 12 px pad. Hover
pill + click hit area cover the whole icon + badge as one target.
Skipped for program 0 (default Acoustic Grand) so unmodified state
stays uncluttered.
Menubar piano
- Dark-mode aware: white keys flip to a soft macOS dark-gray (white
0.20 / 0.13), black keys flip to a brighter accent. Groove darkens.
White-key letter labels flip too (light text on dark caps in dark
mode). Lit (active) state stays accent across both modes.
- Octave-shift slide: the WHOLE board scrolls left/right past the
menubar slot in two phases (off → re-enter from opposite side)
when the user shifts octave. Octave UP slides left (camera pans
toward higher notes); DOWN slides right. 340 ms, linear.
- Music-note glyph flashes (blends toward white) on every fresh note
hit (peak 0.7) and on every octave change (peak 1.0), decaying over
180 ms. Reads as activity feedback without being noisy.
QWERTY layout view
- New panel above the arrow-keys cluster — three-row macOS keyboard
drawn as keycaps. Each cap colored by its mapped piano note: white-
mapped letters wear near-white caps with dark glyphs; black-mapped
letters wear near-black caps with white glyphs. Octave-shifter
letters get a muted accent fill (notepat = ,/. ; Ableton = z/x).
Held key codes light to accent. Inverts piano-key color
conventions intentionally so the keymap reads as "which physical
keys play piano keys."
Arrow keys cluster
- MacBook-style four-keycap D-pad in the bottom-right of the palette
panel. ↑ alone on top, ◀▼▶ in the bottom row. Hover rollover
highlights individual keys; click drives the same selection path
the keyboard arrows do (preview note while held, commit on release).
Per-direction lighting from physical arrow keys too.
Visualizer
- RMS-per-bar (was peak) + asymmetric temporal smoothing kills the
rolling motion. Segmented LED-meter look: 10 stacked LED segments
per bar in a dark bezel housing, per-segment glow, full-fill spells
"MIDI" in dot-matrix when MIDI mode is on (system accent color).
Bezel border tracks the chosen voice's hue (or accent in MIDI).
Hold-to-ramp octave shift
- ,/. keys shift octave; holding either ramps after a 280 ms
hesitation at 160 ms intervals. Each step plays a percussive
Tambourine click whose velocity scales with the new octave so the
audible weight of each notch is distinct without being tonal.
Layout / labels
- "Ableton MIDI Keys" → "Ableton Computer Keyboard", canonical
Ableton logo (drawn from the SVG path the kidlisp.com editor uses).
- Notepat.com mode button uses the live notepat.com favicon
(NotepatFavicon: lazy-fetched + cached in Application Support,
refreshed every 24h, observers re-bind via NotificationCenter).
- "Keyboard Shortcuts" → "Layout"; Layout block lives below the
voice palette + arrow keys instead of above.
- About paragraph: "Menu Band brings the built-in macOS instruments
into the menu bar." (bold "Menu Band").
- Voice palette cells are chiclet keycaps with family-tinted
outlines + per-program shading (each of 128 voices a distinct
shade within its family). Drag stays seamless (no gaps); click
commits + auto-disables MIDI so the audition note sounds.
- Arrow-key navigation on the voice grid (auto-repeat suppressed —
one tap = one cell). Non-arrow keys forwarded to handleLocalKey
so notepat letter keys still play notes while the popover holds
key focus.
Misc
- LocalKeyCapture: panel doesn't steal key when popover is already
the key window — popover stays visually active (controls don't
dim into inactive state) while letter capture still works via
app-level local monitor.
- QWERTY-position panning ported from notepat native: physical
keyboard column → MIDI CC10 pan. Sent to local synth + outbound
MIDI before each note-on.
- Stable kMIDIPropertyUniqueID on the virtual MIDI source so DAW
routing survives reinstalls.
- Letter ghost rewritten as physics: per-cell alphas smooth toward
targets every tick (asymmetric attack/decay rates). No snap on
fresh keypress mid-decay.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This is a binary file and will not be displayed.
This is a binary file and will not be displayed.