Synth v2: modular pro layout, HOLD latching pads, fuller voice engine

- Modular hardware-style panel: System / Oscillator / Filter / Envelope
  / LFO / Drive / Echo / Output / Keyboard sections with labeled frames
- HOLD switch: pads become latching toggles (switching pads retunes the
  held note, unlatching or disabling HOLD releases it)
- Fuller Web Audio voice: waveshaper drive, full ADSR, feedback delay
  (time/feedback/mix), LFO target switch (cutoff or pitch via detune),
  octave/detune/glide with live retuning of held notes
- More of the library in service: MetalKnob (drive, with value bubble),
  VintageKnob (echo time), horizontal LEDFader (echo mix), XYPad
  two-way-linked with the cutoff/res knobs (exponential x-axis mapping),
  SegmentDisplay live frequency readout, 4 preset buttons that glide
  every knob via animateChanges
- Disambiguated synth aria-labels from gallery demos; octave readout
  fixed via decimals/format
- SteppedKnob now honors the format prop for numeric readouts
This commit is contained in:
Dreamodus 2026-07-12 19:44:42 -07:00
parent 54189ad07a
commit c404b3f82d
3 changed files with 565 additions and 177 deletions

View file

@ -30,6 +30,7 @@ export const SteppedKnob = React.forwardRef<HTMLDivElement, SteppedKnobProps>(fu
labelColor,
label,
showValue = true,
format,
focusRing,
className,
style,
@ -92,7 +93,11 @@ export const SteppedKnob = React.forwardRef<HTMLDivElement, SteppedKnobProps>(fu
fontWeight={600}
style={{ pointerEvents: 'none' }}
>
{positions ? positions[index] : ctx.value.toFixed(ctx.decimals)}
{positions
? positions[index]
: format
? format(ctx.value)
: ctx.value.toFixed(ctx.decimals)}
</text>
)}
{label && (