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:
144
README.md
144
README.md
@@ -4,26 +4,42 @@ Free, open-source linear phase EQ plugin built with JUCE. Available as VST3, AU
|
||||
|
||||
      
|
||||
|
||||
## 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)
|
||||
|
||||
Reference in New Issue
Block a user