feat: static gain-curve display for the selected channel
Add editor/gain_curve.rs: a square panel beside the scrolling plot showing the channel transfer (out vs in, -60..0 dB) for whichever channel the plot tab selects. Plots the full wet path — out = (in + pre_gain) + gain_reduction + makeup — using the shared Compressor::gain_computer (now pub) so it matches the DSP and the GR meter. Unity-reference diagonal + threshold marker; mix not folded in. Update README structure/status to reflect the editor/ widget module and the completed Stage 6 visualisers. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -130,21 +130,22 @@ src/
|
||||
oversampler.rs # ✅ 4x polyphase oversampler for true-peak detection (detection-only)
|
||||
```
|
||||
|
||||
The editor's meters and plot are currently drawn directly with egui's `Painter` inline in
|
||||
`editor.rs`. When the UI is redesigned (gain curve, draggable crossover, real layout), the plan is
|
||||
to split it into a widget module so each visualiser is self-contained and reusable:
|
||||
The editor lives in an `editor/` module — one file per visualiser widget (each owns its GUI
|
||||
state), with `mod.rs` as the aggregator/layout. Drawn directly with egui's `Painter`.
|
||||
|
||||
```
|
||||
src/
|
||||
editor/
|
||||
mod.rs # editor assembly + layout (replaces editor.rs)
|
||||
widgets/
|
||||
meter.rs # |L | GR | R| level + gain-reduction cluster (extract from editor.rs)
|
||||
plot.rs # rolling in/out/GR scope (extract from editor.rs)
|
||||
gain_curve.rs # static gain-curve display per channel (threshold/ratio/knee) — planned
|
||||
crossover.rs # frequency display with draggable crossover handles — planned
|
||||
mod.rs # aggregator: create(), EditorState, layout, placeholder slider columns
|
||||
meter.rs # |L | GR | R| level + gain-reduction bars + per-channel ceiling lamp
|
||||
plot.rs # rolling in/out/GR scope (200 Hz ring feed) + ceiling-hit markers
|
||||
crossover.rs # log-freq strip with draggable crossover handles + number boxes
|
||||
gain_curve.rs # static gain-curve display (out vs in) for the selected channel
|
||||
```
|
||||
|
||||
Remaining UI work: replace the placeholder per-channel slider columns in `mod.rs` with the real
|
||||
layout.
|
||||
|
||||
Deferred until the redesign — no need to split prematurely while the layout is still a placeholder.
|
||||
|
||||
---
|
||||
@@ -195,12 +196,13 @@ is essential — without it FL silently skips a plugin it has seen before.)
|
||||
|
||||
Work through these stages in order — each stage produces a loadable, audible plugin.
|
||||
|
||||
**Status (2026-06-23):** Stages 1–4 done — the full signal chain works: 3-band LR4 crossover →
|
||||
per-band pre-gain + compressors (peak/RMS) → 'All' channel → **true-peak brickwall limiter** (4×
|
||||
oversampled detection). `lib.rs` has been split into `params.rs`, `editor.rs`, and `meters.rs`.
|
||||
Stage 6 metering is underway: per-channel **|L | GR | R| meters**, a **latching ceiling lamp**, and
|
||||
a **rolling in/out/gain-reduction plot** (per-channel tabs + flow-speed selector). **Next: gain-curve
|
||||
display and draggable crossover handles, then replace the placeholder slider UI.**
|
||||
**Status (2026-06-25):** Stages 1–4 done — the full signal chain works: 3-band LR4 crossover →
|
||||
per-band pre-gain + compressors (peak/RMS) → per-channel dry/wet mix → 'All' channel → **true-peak
|
||||
brickwall limiter** (4× oversampled detection). `lib.rs` is split into `params.rs`, `meters.rs`, and
|
||||
an `editor/` widget module. Stage 6 visualisers are essentially complete: per-channel **|L | GR | R|
|
||||
meters** + **per-channel ceiling lamps**, a **rolling in/out/GR plot** (200 Hz ring feed, flow-speed,
|
||||
ceiling-hit markers), **draggable crossover handles**, and a **static gain-curve display**. **Next:
|
||||
replace the placeholder slider columns with the real UI layout.**
|
||||
|
||||
### Stage 1 — Skeleton plugin ✅
|
||||
- [x] NIH-plug "passthrough" compiling and loading in DAW
|
||||
@@ -236,8 +238,8 @@ display and draggable crossover handles, then replace the placeholder slider UI.
|
||||
- [x] Per-channel level meters (output level, `|L | GR | R|` cluster)
|
||||
- [x] Per-channel gain-reduction meters (vertical bars) + latching ceiling lamp
|
||||
- [x] Rolling in/out/gain-reduction plot (per-channel tabs, flow-speed selector)
|
||||
- [ ] Static gain-curve display per band (threshold/ratio/knee)
|
||||
- [ ] Draggable crossover handles on a frequency display
|
||||
- [x] Static gain-curve display (out vs in; includes pre-gain + makeup) for the selected channel
|
||||
- [x] Draggable crossover handles on a log-frequency display (with number boxes)
|
||||
- [ ] Replace the placeholder slider columns with the real UI
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user