v1.3: Auto makeup gain, spectrum analyzer, FIR normalization, README overhaul

- Auto makeup gain: RMS-based loudness compensation from actual FIR response
- Real-time FFT spectrum analyzer behind EQ curves
- FIR normalization fix: flat settings now produce exact 0 dB passthrough
- Brickwall limiter (0 dB ceiling) with toggle
- Drag-and-drop signal chain reordering
- Low FIR tap count warning for 512/1024
- Double-click reset on all knobs
- Comprehensive README with linear phase EQ explanation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hariel1985
2026-03-25 22:28:31 +01:00
szülő 9c5b5a3957
commit aa546c7357
9 fájl változott, egészen pontosan 229 új sor hozzáadva és 73 régi sor törölve

144
README.md
Fájl megtekintése

@@ -4,26 +4,42 @@ Free, open-source linear phase EQ plugin built with JUCE. Available as VST3, AU
![VST3](https://img.shields.io/badge/format-VST3-blue) ![AU](https://img.shields.io/badge/format-AU-blue) ![LV2](https://img.shields.io/badge/format-LV2-blue) ![C++](https://img.shields.io/badge/language-C%2B%2B17-orange) ![JUCE](https://img.shields.io/badge/framework-JUCE-green) ![License](https://img.shields.io/badge/license-GPL--3.0-lightgrey) ![Build](https://github.com/hariel1985/InstaLPEQ/actions/workflows/build.yml/badge.svg)
## Why Linear Phase EQ?
Traditional (minimum phase) EQs alter the **phase** of the signal at the frequencies they boost or cut. This causes:
- **Phase smearing** — transients lose their shape, especially on drums and percussive material
- **Asymmetric waveforms** — the signal before and after the EQ change point don't align in time
- **Coloration** — even subtle EQ moves can change the character of the sound beyond the intended frequency adjustment
A **linear phase EQ** applies the exact same time delay to all frequencies. This means:
- **Zero phase distortion** — the waveform shape is perfectly preserved
- **Pristine transients** — drums, plucks, and attacks stay tight and punchy
- **Transparent tonal shaping** — only the frequency balance changes, nothing else
- **Perfect for mastering** — no cumulative phase artifacts when stacking multiple EQ moves
- **Ideal for parallel processing** — EQ'd and dry signals stay perfectly time-aligned when summed
The trade-off is a small amount of latency (automatically compensated by the DAW), which makes linear phase EQ unsuitable for live monitoring but perfect for mixing and mastering.
## Download
**[Latest Release: v1.1](https://github.com/hariel1985/InstaLPEQ/releases/tag/v1.1)**
**[Latest Release: v1.3](https://github.com/hariel1985/InstaLPEQ/releases/tag/v1.3)**
### Windows
| File | Description |
|------|-------------|
| [InstaLPEQ-VST3-Win64.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.1/InstaLPEQ-VST3-Win64.zip) | VST3 plugin — copy to `C:\Program Files\Common Files\VST3\` |
| [InstaLPEQ-VST3-Win64.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.3/InstaLPEQ-VST3-Win64.zip) | VST3 plugin — copy to `C:\Program Files\Common Files\VST3\` |
### macOS (Universal Binary: Apple Silicon + Intel)
| File | Description |
|------|-------------|
| [InstaLPEQ-VST3-macOS.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.1/InstaLPEQ-VST3-macOS.zip) | VST3 plugin — copy to `~/Library/Audio/Plug-Ins/VST3/` |
| [InstaLPEQ-AU-macOS.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.1/InstaLPEQ-AU-macOS.zip) | Audio Unit — copy to `~/Library/Audio/Plug-Ins/Components/` |
| [InstaLPEQ-VST3-macOS.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.3/InstaLPEQ-VST3-macOS.zip) | VST3 plugin — copy to `~/Library/Audio/Plug-Ins/VST3/` |
| [InstaLPEQ-AU-macOS.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.3/InstaLPEQ-AU-macOS.zip) | Audio Unit — copy to `~/Library/Audio/Plug-Ins/Components/` |
### Linux (x64, built on Ubuntu 22.04)
| File | Description |
|------|-------------|
| [InstaLPEQ-VST3-Linux-x64.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.1/InstaLPEQ-VST3-Linux-x64.zip) | VST3 plugin — copy to `~/.vst3/` |
| [InstaLPEQ-LV2-Linux-x64.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.1/InstaLPEQ-LV2-Linux-x64.zip) | LV2 plugin — copy to `~/.lv2/` |
| [InstaLPEQ-VST3-Linux-x64.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.3/InstaLPEQ-VST3-Linux-x64.zip) | VST3 plugin — copy to `~/.vst3/` |
| [InstaLPEQ-LV2-Linux-x64.zip](https://github.com/hariel1985/InstaLPEQ/releases/download/v1.3/InstaLPEQ-LV2-Linux-x64.zip) | LV2 plugin — copy to `~/.lv2/` |
> **macOS note:** Builds are Universal Binary (Apple Silicon + Intel). Not code-signed — after copying the plugin, remove the quarantine flag in Terminal:
> ```bash
@@ -33,43 +49,97 @@ Free, open-source linear phase EQ plugin built with JUCE. Available as VST3, AU
## Features
### Linear Phase EQ
### Linear Phase EQ Engine
- True linear phase processing using symmetric FIR convolution
- Zero phase distortion at any gain setting
- 8192-tap FIR filter (configurable: 4096 / 8192 / 16384)
- DAW-compensated latency (~93ms at 44.1kHz default)
- Background thread FIR generation — glitch-free parameter changes
- Zero phase distortion — the waveform shape is perfectly preserved at any gain setting
- Mathematically transparent: only magnitude changes, phase stays untouched
- FIR impulse response normalized for unity passthrough (0 dB at flat settings)
- Background thread FIR generation — glitch-free, click-free parameter changes
- DAW-compensated latency for seamless integration
### Configurable FIR Resolution
Six quality levels to balance precision vs. latency:
| Taps | Latency (44.1 kHz) | Best for |
|------|---------------------|----------|
| 512 | ~6 ms | Low-latency monitoring |
| 1024 | ~12 ms | Tracking |
| **2048** | **~23 ms** | **Default — mixing** |
| 4096 | ~46 ms | Detailed work |
| 8192 | ~93 ms | Mastering |
| 16384 | ~186 ms | Maximum precision |
Low tap counts have reduced accuracy below ~100 Hz — a warning is displayed when using 512 or 1024 taps.
### Interactive EQ Curve Display
- Logarithmic frequency axis (20 Hz — 20 kHz)
- Linear gain axis (-24 dB to +24 dB)
- Click to add EQ nodes (up to 8 bands)
- Drag nodes to adjust frequency and gain
- Scroll wheel to adjust Q/bandwidth
- Right-click for band type selection and delete
- Double-click to reset band to 0 dB
- Real-time frequency response curve with glow effect
- Per-band curve overlay
- Click anywhere to add an EQ node (up to 8 bands)
- Drag nodes to adjust frequency and gain in real time
- Scroll wheel over a node to adjust Q/bandwidth
- Right-click a node for band type selection or delete
- Double-click a node to reset it to 0 dB
- Combined frequency response curve with glow effect
- Individual per-band curve overlays (color-coded)
- Real-time FFT spectrum analyzer behind the EQ curves (shows live audio content)
### Band Types
- Peak (parametric)
- Low Shelf
- High Shelf
- **Peak** (parametric) — boost or cut a specific frequency range
- **Low Shelf** — boost or cut everything below a frequency
- **High Shelf** — boost or cut everything above a frequency
### Auto Makeup Gain
- Automatically compensates for the loudness change caused by EQ settings
- Computed from the actual FIR frequency response (not theoretical) — accounts for FIR resolution limits
- RMS-based calculation with linear frequency weighting (matches white noise / broadband signals)
- Toggleable on/off — displays the current compensation value in dB
- Mastering-safe: fixed value based on EQ curve, no signal-dependent gain changes
### Output Limiter
- Brickwall limiter with 0 dB ceiling
- Toggleable on/off
- Prevents clipping when applying large EQ boosts
- 50 ms release time
### Drag-and-Drop Signal Chain
- Reorderable processing chain at the bottom of the GUI
- Three blocks: **Master Gain**, **Limiter**, **Auto Gain**
- Drag blocks to change processing order (e.g., put limiter before or after gain)
- Visual arrows show signal flow direction
- Chain order saved/restored with DAW session
### Controls
- Per-band: Frequency, Gain, Q knobs
- Master gain (+/- 24 dB)
- Bypass toggle
- State save/restore (DAW session recall)
- **Per-band:** Frequency, Gain, Q knobs with 3D metal styling
- **Master Gain:** +/- 24 dB output level control
- **Bypass:** global bypass toggle
- **New Band:** button to add a new EQ node at 1 kHz / 0 dB
- **FIR Quality:** dropdown to select tap count / latency
- All knobs reset to default on double-click
### GUI
- Dark modern UI matching InstaDrums visual style
- 3D metal knobs with glow effects (orange for EQ, blue for Q)
- Dark modern UI with InstaDrums visual style
- 3D metal knobs with multi-layer glow effects (orange for frequency/gain, blue for Q)
- Carbon fiber background texture
- Rajdhani custom font
- Fully resizable window with proportional scaling
- Animated toggle switches
- Rajdhani custom font (embedded)
- Fully resizable window (700x450 — 1920x1080) with proportional scaling
- Animated toggle switches with smooth lerp
- Color-coded EQ bands (8 distinct colors)
- All fonts and UI elements scale with window size
- State save/restore — all settings recalled with DAW session
## How It Works
InstaLPEQ uses a **FIR-based linear phase** approach:
1. Each EQ band's target magnitude response is computed from IIR filter coefficients (Peak, Low Shelf, or High Shelf)
2. All band magnitudes are multiplied together to form the combined target frequency response
3. An inverse FFT converts the magnitude-only spectrum (zero phase) into a symmetric time-domain impulse response
4. A Blackman-Harris window is applied to minimize truncation artifacts
5. The FIR is normalized so a flat spectrum produces exactly 0 dB passthrough
6. The FIR filter is applied via JUCE's efficient FFT-based partitioned `Convolution` engine
7. Auto makeup gain is computed from the actual FIR frequency response (forward FFT of the final filter)
This ensures **mathematically perfect phase linearity** — the only thing that changes is the frequency balance. The original waveform shape, transient character, and stereo image are completely preserved.
## Building
@@ -105,22 +175,10 @@ Output:
- AU: `build/InstaLPEQ_artefacts/Release/AU/InstaLPEQ.component` (macOS)
- LV2: `build/InstaLPEQ_artefacts/Release/LV2/InstaLPEQ.lv2`
## How It Works
InstaLPEQ uses a **FIR-based linear phase** approach:
1. Each EQ band's target magnitude response is computed from IIR filter coefficients (Peak, Low Shelf, or High Shelf)
2. All band magnitudes are multiplied together to form the combined target response
3. An inverse FFT converts the magnitude-only spectrum into a symmetric time-domain impulse response
4. A Blackman-Harris window is applied to minimize truncation artifacts
5. The FIR filter is applied via JUCE's efficient FFT-based `Convolution` engine
This ensures **zero phase distortion** regardless of EQ settings — ideal for mastering, surgical corrections, and transparent tonal shaping.
## Tech Stack
- **Language:** C++17
- **Framework:** JUCE 8
- **Build:** CMake + MSVC / Xcode / GCC
- **Audio DSP:** juce::dsp (FFT, Convolution, IIR coefficient design)
- **Audio DSP:** juce::dsp (FFT, Convolution, IIR coefficient design, Limiter)
- **Font:** Rajdhani (SIL Open Font License)