Subtractive MIDI synth¶
The portable processor has eight voices, sine/polyBLEP saw/polyBLEP square/triangle waveform selection, a resonant low-pass VCF and a VCA. One ADSR per voice drives both amplitude and filter excursion. The knobs support vertical dragging, Shift for finer pointer changes, arrow and Home/End/Page keys, numeric entry and double-click reset. Cutoff uses logarithmic knob travel. The shared web controls provide gesture ownership and snapshot refresh without feeding edits back to audio.
| Control | Range | Default |
|---|---|---|
| VCA level | 0..1 | 0.6 |
| VCF cutoff | 20..20,000 Hz, capped below Nyquist internally | 800 Hz |
| Resonance | Q 0.5..8 | 0.7 |
| Filter envelope amount | 0..72 semitones above base cutoff | 36 |
| Attack / decay / release | 0..5,000 ms | 10 / 150 / 300 ms |
| Sustain | 0..1 | 0.7 |
ADSR edits latch at the next note-on. Level, waveform, cutoff, resonance and filter amount affect held notes. Waveform changes retain oscillator phase but are not crossfaded. Filter coefficients are prepared on the UI thread into a fixed 256-step table; audio selects an entry from envelope/timbre position. Triangle can alias; there is no limiter or overload guarantee at high resonance. MIDI velocity scales the VCA and the mix scales by the eight-voice capacity.
Click and hold piano keys or use A W S E D F T G Y H U J K when the page
background or piano widget has keyboard focus. The reusable two-octave keyboard
spans C3–C5, with shorter black keys layered above adjacent white keys. Independent
pointers play chords; dragging releases the previous key and starts the next. Focused piano keys also play with Space/Enter.
Release, cancellation, opening settings or leaving the window releases held
on-screen notes. All notes off clears queued notes at the next processing block.
MIDI sustain, bend and the existing two-zone voice policy remain available.
This app is distinct from the existing Sine CLAP reference, which has its own fixed sine processor and host level control. The new subtractive processor does not yet have a plug-in export.