Changelog
All notable changes to Buffle Audio Visualize are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[4.0.1] — 2026-07-07
Fixed
- Multi-instance session panel only showed one instance regardless of how many were actually registered. The panel's height calculation undercounted the vertical space its own title and padding take up, so any row beyond the first didn't fit and was silently dropped during painting — with 2 instances registered (footer correctly read "2 INST"), the panel body showed only 1. Found by loading two real instances of the plugin in Cubase and visually inspecting the panel; the footer badge count was always correct, only the panel's row rendering was affected. Fixed the size formula so it reserves the correct baseline before adding per-row height.
[4.0.0] — 2026-07-07 — "Studio"
Added
- Multi-instance session intelligence: every
Visualize instance registers with a process-wide
InstanceRegistry(juce::SharedResourcePointer— no shared memory or IPC needed). A footer badge readsN INSTonce 2 or more instances share this process; clicking it opens a live panel listing each instance's name, integrated LUFS, true peak, and correlation, refreshed 4 times per second. - Host-reported track names (
updateTrackProperties) are published to the registry, so hosts that report them (e.g. Reaper, Cubase) show the real track name instead of a generic "Instance N".
Known limitation
- Only instances sharing the same OS process can see each other. Most hosts run VST3/AU plugins in-process, but some sandbox each plugin (or each instance) into its own process for stability/security — sandboxed instances will not appear. There is no reliable way to detect this from inside the plugin, so it isn't surfaced in the UI; the panel simply shows whichever instances happen to share this process.
Notes
- This closes out
Documentation/ROADMAP_V4.md: every milestone from v3.2.0 through v4.0.0 has shipped. - Major version bump reflects the headline architectural change (state
shared across instances within a process) and the new
updateTrackPropertiesoverride, not a plugin-ID or state-format break — existing saved projects and presets continue to load unchanged.
[3.6.0] — 2026-07-07
Added
- Windows (VS2022) and Linux (Makefile) exporters in
the
.jucer. Projucer generates working project files for both, referencing all first-party source files correctly.
Known limitation
- These exporters are unvalidated: this project is maintained on macOS only, with no Windows or Linux machine available to compile, run, or pluginval-test them. Treat them as a starting point for a contributor with that hardware, not a supported release target yet. The macOS build, validation, and release process are unaffected.
[3.5.0] — 2026-07-07
Added
- Spectral tilt readout (
TILT ±X dB/oct) — a real, calibrated least-squares measurement of the spectrum's slope in dB per octave. Positive = brighter than flat, negative = darker. - Approximate sharpness readout
(
SHARP X (approx)) — a Zwicker-style brightness-trend indicator computed from the existing Bark-band decomposition. Explicitly labelled "(approx)": it uses band energy as a stand-in for sone-scale specific loudness rather than a full ISO 532 loudness model, so it is a relative trend indicator, not a DIN 45692-calibrated measurement.
Changed
- Masking Radar thresholds tuned more conservatively to reduce false positives (masking index 4→6 dB, detection threshold 3→4 dB). This is a principled DSP adjustment, not listening-test-validated calibration — the feature remains labelled beta.
- Refactored the Bark-band (critical-band) decomposition out of Masking Radar into a shared method so the new sharpness estimate reuses the same analysis instead of duplicating it.
[3.4.0] — 2026-07-07
Added
- Flight Recorder spectrum replay — the recorder now samples the spectrum shape roughly once a second; scrubbing the timeline shows the recorded spectrum at that moment instead of the live curve. Snapshots decimate in lockstep with the metric history so long sessions stay memory-bounded.
- Measurement cursors on the spectrum panel — Shift+click places cursor A, a second Shift+click places cursor B, showing a delta-frequency (in Hz and octaves) and delta-dB readout between them. A third Shift+click restarts. Cursors work against both the live curve and a replayed spectrum.
[3.3.0] — 2026-07-06
Added
- Preset system — a
PRESETbutton in the header with four factory presets bundling the settings that differ between mixing contexts: loudness target, waveform window, vectorscope view, and spectrum averaging/peak-hold.STREAMING— −14 LUFS, polar vectorscope, medium averagingBROADCAST— −23 LUFS (EBU R128), M/S vectorscope, slow averagingPODCAST— −16 LUFS, M/S vectorscope, medium averagingCLUB— −9 LUFS, polar vectorscope, fast averaging
- Save/Load custom presets (
.bavpresetfiles) — captures the full workspace, including the reference library, so a saved preset is a complete snapshot. - The loudness target line (previously hardcoded at −14 LUFS) is now configurable and persists with the session.
[3.2.0] — 2026-07-06
Added
- Audio Unit (AU) format — the plugin now builds a
.componentand loads natively in Logic Pro, GarageBand, and other AU hosts. The macOS installer packages VST3 + AU + Standalone as selectable components. Validated at pluginval strictness 10 (AU and VST3).
Changed
- Plugin manufacturer code is now
Bufl(AU requires a non-all-lowercase four-character code). This changes the VST3 unique ID; a project saved with a pre-3.2 build may need the plugin re-inserted.
[3.1.0] — 2026-07-06
Added
- Plugin state persistence — the plugin now saves its
settings and the tone-match reference library with the DAW project
(
get/setStateInformationvia ajuce::ValueTree). Restored: waveform time window, vectorscope view (M/S vs polar), spectrum averaging mode and peak-hold time, Translation Lens system, Masking Radar toggle, and every reference slot (with active/overlay/delta state). Addresses the top known limitation from v3.0.0. State round-trips are exercised by pluginval strictness 10.
3.0.0 — 2026-07-05
Completes the six-feature "next-generation" set. Validated at pluginval strictness 10.
Added
- Masking Radar (beta): Bark-scale (24 critical-band) self-masking estimate using a Schroeder spreading function; heat overlay on the spectrum highlighting perceptually buried regions, with a plain-language callout naming the dominant masker. Computed on the GUI thread — the audio thread is untouched.
2.6.0 — 2026-07-05
Added
- Flight Recorder: logs the full metric state every 100 ms for the whole session. Memory-bounded via in-place decimation for long sessions.
- Timeline strip: short-term loudness history with incident ticks; click/drag to scrub and read the exact values at any moment.
- HTML mix report (REPORT button): self-contained report with an inline SVG loudness chart, summary statistics, and incident count; opens in the browser.
2.5.0 — 2026-07-05
Added
- Mix Health Feed: a debounced rule engine over all metrics that reports issues in plain language (true-peak, mono-bass, phase, loudness target, balance, dynamic range). Footer severity dot + headline; click for the full feed.
2.4.1 — 2026-07-05
Added
- Translation Lens: LENS button cycling PHONE / BUDS / CAR / CLUB. Re-weights the displayed analysis (live, reference, and corridor curves) through approximate playback-system responses and shades regions that system won't reproduce. The audio path is never altered.
2.4.0 — 2026-07-05
Added
- Band-Split Stereo Guard: correlation per 6 Linkwitz-Riley bands as a colour strip under the vectorscope, plus a dedicated MONO BASS alarm LED for <150 Hz mono-compatibility.
- Reference Corridor: up to 4 reference slots (A–D); a min–max tolerance band is drawn on the spectrum and DELTA views.
Fixed
- Audio-thread hot loop: the full-band correlation window scan was recomputed per sample (effectively O(n²)); it is now decimated to the display rate.
- Installer components are marked non-relocatable, preventing macOS Installer from relocating onto — and taking ownership of — the build directory.
2.3.0 — 2026-07-05
Added
- Tone matching / reference comparison: SNAP (capture the running average spectrum), LOAD (analyze a reference audio file on a background thread), REF (green overlay), DELTA (LIVE − REF around a 0 dB line).
- Reference engine stores curves on a sample-rate-independent log grid, so a reference analysed at a different rate lines up with the live curve.
Changed
- Consistent panel titles and rounded meter wells across all four analyzers.
2.2.0 — 2026-07-05
Added
- Ozone-style polar half-dome vectorscope view (click the scope to toggle).
- Log-frequency spectrum sampling with a constant number of points per octave.
- Adjustable peak hold (HOLD: 1 / 3 / 5 / 10 s); peak tags follow held peaks.
- Tooltips on all panels and controls; bigger header logo; About box on the footer logo; Hz + dB readout on the spectrum cursor.
2.1.0 — 2026-07-05
Added
- Redesigned dark UI with a compact header bar and control buttons (FREEZE / RESET / AVG / HOLD / WIN).
- Pro-Q-style violet spectrum with frequency peak tags.
- Standalone plugin format alongside VST3.
- macOS
.pkginstaller (Installer/build_installer.sh).
Fixed
- Logo loading: previously used hard-coded absolute paths (invisible on any other machine). Now embedded via BinaryData and recoloured for the dark theme.
2.0.0 — 2026-07-04
Completes the four-component analyzer suite.
Added
- Spectrum analyzer: 4096-point FFT, Hann window, 75 % overlap, logarithmic 20 Hz–20 kHz display with peak hold and averaging modes.
- Loudness meters: ITU-R BS.1770-4 K-weighted LUFS (momentary / short-term / gated integrated), 4× oversampled true peak, EBU Tech 3342 loudness range.
juce_dspmodule; both analyzers wired into the processor and the 2×2 grid.
1.2.0 — 2025 (pre-existing baseline)
Added
- Responsive UI scaling (400×300 → 1200×900).
- Professional Mid/Side vectorscope with correlation and balance meters.
- Real-time stereo waveform visualization; zero-latency pass-through.
Earlier history (1.0.0, 1.1.0) is summarized in WaveformVisualizer/Source/PluginVersion.h.
Mirrored from the project source for the public site — see the in-repo Markdown for the canonical, linkable version.