From ce218b7459314dc9b7a5faf26139b8954a417b97 Mon Sep 17 00:00:00 2001 From: skal Date: Wed, 18 Feb 2026 12:05:13 +0100 Subject: docs(mq_editor): document LP/HP post-synthesis filter sliders Co-Authored-By: Claude Sonnet 4.6 --- tools/mq_editor/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/mq_editor/README.md b/tools/mq_editor/README.md index 78986bf..bde7e54 100644 --- a/tools/mq_editor/README.md +++ b/tools/mq_editor/README.md @@ -65,6 +65,20 @@ open tools/mq_editor/index.html | `normalizeDB(db, maxDB)` | dB → intensity [0..1] over 80 dB range | | `partialColor(p)` | partial index → display color | +## Post-Synthesis Filters + +Global LP/HP filters applied after the oscillator bank, before normalization. +Sliders in the **Synthesis** panel; display shows -3 dB cutoff frequency. + +| Control | Filter | Formula | Bypass | +|---------|--------|---------|--------| +| **LP k1** | `y[n] = k1·x[n] + (1−k1)·y[n−1]` | `-3dB: cos(ω) = (2−2k−k²)/(2(1−k))` | k1 = 1.0 | +| **HP k2** | `y[n] = k2·(y[n−1] + x[n] − x[n−1])` | `-3dB from peak: cos(ω) = 2k/(1+k²)` | k2 = 1.0 | + +Both default to 1.0 (bypass). Frequency display uses `audioBuffer.sampleRate` when loaded, falls back to 44100 Hz. + +--- + ## Resonator Synthesis Mode Each partial has a **per-partial synthesis mode** selectable in the **Synth** tab: @@ -133,6 +147,7 @@ For a partial at 440 Hz with `spread = 0.02`: `BW ≈ 8.8 Hz`, `r ≈ exp(−π - [x] Auto-spread detection per partial and global - [x] Mute / delete partials - [x] Per-partial resonator synthesis mode (Synth tab toggle) + - [x] Global LP/HP post-synthesis filter sliders with Hz display - [ ] Phase 4: Export (.spec + C++ code generation) ## See Also -- cgit v1.2.3