Release Notes
This page is generated automatically from the project’s CHANGELOG.md and always reflects the latest released version.
[1.4.2] - 2026-09-09
Added
-
Spectrogram: detail setting — Settings → Graphs → Spectrogram detail picks the compute-grid size (Standard / High / Ultra). High (4096²) is the new default; the transform now runs on a finer grid than before.
-
Spectrogram: group-delay toggle — the grey group-delay comparison line can now be turned off.
-
Spectrogram: default lower bound setting — Settings → Graphs → Spectrogram now has its own lower-bound (Min dB) default, −30 dB, matching the sonogram’s. It’s what the window opens with and what its Reset button restores.
-
Spectrogram: CSD mode — Cumulative Spectral Decay: for a sweep of gate positions the impulse response from the gate to its end is FFT’d, showing the spectrum decaying over time in milliseconds. A Rise control sets the gate’s leading-edge taper.
-
Spectrogram: Burst Decay mode — Morlet-wavelet burst decay on a period-based time axis: each frequency’s decay is read in cycles rather than milliseconds, so equal-Q resonances look identical everywhere. Period 0 is auto-locked to the arrival peak. Controls: Bandwidth (1/3 – 1/24 octave), Freq res (12–96 points/octave), Periods, Pts/period.
-
Spectrogram: Reset button — a Reset at the end of the control bar returns every mode’s processing parameters (Q, Rise, Periods…) to their defaults.
-
Spectrogram: 3D waterfall view — a 2D / 3D button renders the time–frequency grid as a shaded coloured perspective surface (same colormap and Min/Max dB as the 2D image), for all four transform modes. Left-drag rotates, right-drag pans, scroll zooms, double-click resets; the time, frequency and dB axes are labelled. Hovering the surface draws the time and frequency slices through the cursor with a value readout. A Show control switches between surface, surface + slice lines, and a slices-only line waterfall (slice count adjustable). The surface keeps narrow resonances and fast high-frequency detail that a plain average would have smoothed away.
-
Spectrogram: frequency smoothing — a Smooth dropdown averages the spectrogram across frequency in fractions of an octave (None to 1/3 octave, or ERB), independently of the main graph’s smoothing. Applies to every transform and to both the 2D and 3D views; a free re-render.
-
Spectrogram: analysis parameters are undoable — Undo / Redo now covers the spectrogram’s analysis controls (transform mode and its preset / window, CSD Rise, Burst-decay parameters, frequency smoothing). Pure view settings (colour range, Normalize, axis layout, 2D/3D, view angle) stay outside the history.
-
Room Calibration: export a measurement — the Impulse Response Management window now has an ⬇ Export button (next to Import / Measure) that saves the selected measurement as WAV or TXT, matching what Loudspeaker Design mode already offered per angle.
Changed
- Spectrogram: automatic time crop — the time axis is now cropped to the part that carries signal: leading and trailing time slices where every frequency is at or below the Min dB level are dropped. It reads the rendered spectrogram directly, so the plot edges sit exactly where the colour reaches the floor, and it follows Min dB and Normalize instantly. Raise Min dB (or use STFT) for a tighter view; the CQT’s low-frequency smear keeps it wider.
- Spectrogram: view stays auto-fitted — after a double-click the plot keeps auto-fitting to the cropped image, so it re-frames itself when you change Min dB, the transform, or the axis layout, until you pan or zoom again.
- Spectrogram: view saved with the project — transform mode, resolution preset, normalization, group-delay toggle, axis layout and colormap range are stored in the
.lnfand restored on reload. Projects saved by an older LinFIR open at the app defaults. - Settings → Graphs — the Directivity Sonogram and Spectrogram options are now in separate sections.
Fixed
- Spectrogram: group-delay overlay drifted with smoothing — with smoothing active the grey group-delay line crept toward low frequencies as the smoothing widened. It is now smoothed symmetrically per octave and stays on the true frequency.
- Splicing wizard: mouse-wheel scroll panned the graphs instead of the page: scrolling while the cursor happened to be over one of the wizard’s graphs panned that graph instead of scrolling the wizard’s steps. The graphs no longer capture wheel/trackpad scroll; dragging still translates them as before.
- Off-axis harmonic distortion went blank, and off-axis recompute was slow: with the distortion graph visible, the background job that refreshes the off-axis responses (for the sonogram, directivity index and listening window) also re-ran the full harmonic-distortion analysis on every cycle - on data it couldn’t process - and then overwrote the good distortion data with the empty result. That job now leaves distortion alone entirely: it is captured data the main view already computes once. Off-axis refreshes are also noticeably quicker. Separately, the windowed impulse response is no longer stored in the project file (it is rebuilt from the raw capture on load), so a project saved with an incomplete one can’t carry that state back in, and project files are a little smaller.
[1.4.1] - 2026-09-06
Added
- Auto-align driver delays: a button below ➕ Add Driver sets every active driver’s Time Delay so their post-filter phase curves cross at the middle of each crossover overlap (the band where both drivers are within −20 dB of their own maximum). A driver that shares no band with the rest is left alone.
- Reorder drivers / measurements: each driver’s action bar gains ⬆ / ⬇ buttons (between paste and the remove button, which is now set slightly apart to avoid mis-clicks) that move it up or down. The new order applies everywhere — parameter list, graphs and legends, directivity index, and exports. The same buttons reorder measurement positions in Room Calibration mode.
- Directivity sonogram: clipping highlight: levels that rise above the colormap maximum (which per-band normalization can produce) now show in off-white instead of saturating to the same red as the loudest in-range energy, so it is obvious where the response goes over the reference level. It can be turned off in Settings → Graphs.
- Directivity sonogram: default normalization: Settings → Graphs now has a Sonogram normalization setting that picks which normalization mode the sonogram opens with. It can still be changed per-session from the sonogram’s own toolbar.
- Spectrogram: default axis orientation: Settings → Graphs now has a Spectrogram axes setting choosing whether the spectrogram opens with time on X (default) or frequency on X. The toolbar button still swaps it per-session.
- Splicing wizard: automatic level match: the Far-field window & predicted level step gains a Match level to far-field button next to the manual level offset. It shifts the predicted near-field curve onto the windowed far-field measurement across the valid blend range, using the median of the per-bin level difference so a diffraction ripple or a narrow notch near a band edge does not throw it off.
- Splicing wizard: automatic phase match: the Transition & blend step gains a Match phase button next to the near-field time offset. It smooths the predicted and far-field phase curves, then sets the offset to the delay that makes them cross at the middle of the transition band (where the blend is 50/50), leaving only a residual slope or a whole-turn wrap to sort out by hand.
Changed
- Settings → Graphs: the directivity-sonogram and spectrogram options moved out of “Magnitude Plot Bounds” into their own “Directivity Sonogram & Spectrogram” section. The General and Graphs settings documentation has been rewritten to match the actual tab layout and default values.
- Spectrogram: delay compensation: the spectrogram time axis and its grey group-delay overlay are now shifted by Delay Compensation, the same as the Phase and Group Delay graphs, so the acoustic arrival sits at t ≈ 0 and the views agree.
Fixed
- Aberrant driver phase / group delay with very long FIR filters: a driver whose filter chain included a very long FIR could show a rising phase and a negative group delay, even though the system sum stayed correct. The driver response is now computed the same way as the sum.
- Subtle phase rotation from delay compensation: enabling mic-distance delay compensation tilted the displayed phase slightly more than it should. Part of the cause was shared with the long-FIR fix above; the remainder, visible in time-centred and unwrapped phase views, was the compensation being rounded to a whole sample on the display side while applied exactly everywhere else. It is now applied consistently.
[1.4.0] - 2026-09-05
Added
- Near-field / far-field splicing wizard (license required): a new seven-step wizard that builds a full-range anechoic response for a driver by combining near-field captures of each radiating element (driver, vent, passive radiator) with its existing far-field polar measurements — the Don Keele method. The near-field captures cover the bass, where an indoor gated measurement can’t reach; the far-field measurements keep their real directivity and diffraction above the transition. The wizard models the enclosure (box or sphere, baffle edge treatment, per-element positions on any face), predicts each element’s directivity and edge diffraction per angle with a Distributed Edge Dipole model, level-matches the elements from their Sd and mic distance, guards against room reflections with the image-source method, and blends the two responses in a physics-bounded transition band with a magnitude and phase preview. Once applied, the spliced impulse response replaces the raw capture for every measured angle throughout the app (response, DI, sonogram, export), and newly captured angles are spliced automatically. Reached from IR Management → Near-field measurements (splicing); see the documentation for a step-by-step guide.
- Unsaved-work protection: closing LinFIR with unsaved changes now asks whether to save first. If a brand-new project that was never saved to disk is closed, it is offered back for recovery the next time you open the app.
- Configurable sweep End Frequency: the sweep’s upper limit can now be set in the IR Management window and the splicing wizard (defaults in Audio Settings, with a Reset button), instead of always being fixed just below Nyquist. The sweep stays flat at full amplitude up to the End Frequency then fades out over at most an octave. Lower it to stop the sweep below a loud cone-breakup resonance: previously such a resonance forced you to drop the sweep level to avoid clipping, sacrificing the signal-to-noise ratio of the band that matters. Harmonic distortion is still captured at full bandwidth — the deconvolution filter keeps its full range, so a harmonic landing above the End Frequency is not truncated. “Auto” keeps the previous behaviour exactly.
- Spectrogram: dB in the hover tooltip and a group delay overlay: hovering the spectrogram now shows the exact level in dB at the cursor alongside time and frequency, using the same reference as the colour map (global or per-band). A thin grey line also traces the group delay across frequency directly on top of the colour map — the same curve as the main Group Delay graph (same Smoothing setting), just not shifted by Delay Compensation — making it easy to check whether a resonance or smear in the spectrogram corresponds to a group-delay bump at the same frequency. The tooltip labels this reading explicitly (“Group Delay: … ms”) and only shows it when the cursor is actually hooking the grey line.
- Spectrogram: selectable STFT window shape: in STFT mode a new Shape control chooses the analysis window — Rectangular, Hann, Hamming, Blackman-Harris, Tukey, or Gaussian — to trade time localisation against spectral leakage. Gaussian (the previous fixed behaviour) stays the default. The transform is also now picked from a dropdown instead of separate buttons.
Fixed
- Interface freezing on projects with many off-axis measurements: editing any parameter (gain, delay, filters, target curve…) no longer freezes the interface on every change. The off-axis and directivity calculations now run in the background without copying the measurement data each time.
- Directivity sonogram not keeping up with edits: the sonogram now updates in place as you change parameters. It no longer updated only the on-axis response, and it no longer closed and reopened itself - jumping back to the center of the screen - on every change.
- Saved session could fail to reload: on large projects the file holding the application state could grow very large and then fail to load on startup, silently opening LinFIR with an empty project and forgetting the last-opened project. That state is now kept small and the previous project reloads reliably.
- Crash during impulse response capture: the distortion-zone calculation used during IR capture could underflow and crash the app when the main (H1) peak was close to the start of the recorded buffer (e.g. a short sweep or a small manual offset).
- “Missing measurement” warning on every angle change: selecting an off-axis angle where a driver has no measurement no longer raises a persistent warning toast. Browsing angles a driver was only measured on fewer axes is normal — its curve simply doesn’t appear.
- IR window Start / Stop crossing: setting the window start and stop within a taper of each other (e.g. 4.0 ms and 4.2 ms) used to make the fade-in and fade-out overlap and produce a malformed window. The window is now the product of the fade-in and fade-out envelopes, so overlapping edges compose into a smooth sub-unity bump — in both the applied window and the on-graph preview, simple and adaptive alike. Start and Stop are fully independent again: editing one no longer moves the other, which also fixes the value jumping while you typed a number into either field (including in the splicing wizard).
- Raw phase overlay misaligned from the filtered curve: with “Remove time of flight rotations” on, the dashed raw (pre-filter) phase curve shown while a driver’s filter window is open could sit a large linear trend or a full 360° turn away from the filtered curve it is meant to overlay. Two causes: (1) for a driver with only IIR filtering (no LP/HP/correction FIR) the raw curve was compensated for an FIR-chain delay its filtered response never carries; (2) the raw curve was given its own independently-rounded N×360° offset instead of the shared one. The raw phase now gets exactly the same time-of-flight removal and DC alignment as the filtered phase.
- Global phase correction ignored the global magnitude correction: unlike the per-driver FIR correction, the global FIR’s phase correction was designed from the summed response before the global magnitude correction FIR, so it did not linearise the excess phase a minimum-phase (Causality > 0) global magnitude correction introduces. The global phase correction now runs on the magnitude-corrected response, mirroring the per-driver behaviour; the fusion padding is also sized for the real magnitude-FIR causality.
- IR window fade-in applied even at Start = 0: Start = 0 means “keep the measurement from its very first sample” — nothing is being truncated there, so there is nothing to smooth. The window nonetheless faded the first 0.5 ms in from silence. The window (and its on-graph preview, simple and adaptive alike) now opens at full amplitude immediately when Start = 0. The Stop side needed no equivalent fix: it is already a no-op once Stop reaches the measurement’s own duration.
Improved
- IR window preview: the transient overlay shown while editing a driver’s time window now also draws that measurement’s raw, un-windowed impulse response on the Impulse Response graph, as a dashed line in the same colour as the driver’s curve. Placed with the same time shift as the processed curve underneath and fading out with the red envelope, it lets you see directly what the window keeps and what it removes. A new Show window button in the IR Windowing section brings the whole overlay up at any time without changing a setting. The documentation now also explains why the overlay’s start/stop do not sit at the entered values once the driver has filters or a time delay (the window times are relative to the raw IR; the graph shows the processed, delayed signal).
- Why the window preview doesn’t line up with Start/Stop: hovering Start or Stop in the IR Windowing section now shows exactly where that value shows up on the Impulse/Step Response graphs and why, broken down by FIR delay / Time Delay / Delay Compensation. Whenever the two positions actually differ, a new On Graph row appears right under Window Duration with both shifted values at a glance (e.g.
2.00 ➡ 12.00 ms). Start/Stop themselves are untouched — they stay defined on the raw measurement, this only translates where they currently land. - Auto-save: no longer causes a brief periodic hitch while you are only viewing a project without editing it.
- Undo / Redo: the undo history now keeps the last 50 steps (was 10). Each step is stored as parameters plus shared references to the measurement data rather than a full copy, so the deeper history still uses only a few MB even on a large project.
[1.3.14] - 2026-08-28
Added
- Rotation table position dial during auto-scan: the driver IR window now shows the same angular position dial as Settings -> Rotation Table (graphical only, no controls) above the measurement buttons, visible while an auto-scan is running.
- Auto-scan end-of-scan behavior: whenever an auto-scan ends - whether it completes, is stopped, or is aborted due to a rejected capture - the rotation table is now sent back to 0°. For Pololu Tic controllers, the motor is also energized automatically at the start of the scan if it wasn’t already. A new De-energize motor after auto-scan toggle (Settings -> Rotation Table, off by default) de-energizes the motor once it’s confirmed to have settled back at 0°.
Improved
- Adaptive IR windowing: the adaptive window’s stop-side fade-out now scales its taper duration with each frequency band’s own wavelength, instead of using a fixed duration for every band. This avoids artifacts from cutting off low-frequency content mid-cycle.
- This changes the exact shape of the adaptive window’s fade-out compared to earlier versions, so results computed with it (especially the low-frequency end of the response) may shift slightly for projects created with older versions of LinFIR. Re-check the bass estimation on existing projects using adaptive windowing if this matters for your work.
- Driver IR window layout: the growing list of already-captured off-axis measurements (“Measurements”) is now shown below the measurement controls (“Measurement Controls”: axis selector, angle field, position dial, Import/Measure/Scan/Stop buttons, capture progress) instead of above them, so those controls no longer get pushed further down - and out of view - as more angles are captured.
Fixed
- Undo/auto-save snapshots while dragging: dragging a value in an IIR (global or per-driver), target curve, or FIR correction window no longer triggers extra undo-history/auto-save snapshots mid-drag when another such window happens to be open at the same time.
- Directivity Analysis overlay plot: the overlay plot’s curves no longer get truncated at the bottom by the sonogram colorbar’s lower bound setting. They now use the “Drivers range” setting (Settings -> Graphs) instead, which isn’t clamped to a heatmap-friendly dynamic range.
- Auto-scan not stopping on a rejected capture: if a measurement was rejected during an auto-scan (clipping, signal too low, or h1/h2 harmonic contamination), the scan no longer silently continued as if it had succeeded - it now properly aborts with an error, since the underlying problem would likely affect every remaining angle the same way.
[1.3.13] - 2026-08-27
Added
- Native file opening on macOS: double-clicking a
.lnfproject file in Finder (or using “Open With”) now opens it directly in LinFIR - including reusing an already-running instance of the app. - Release notes in the documentation: the full changelog is now available as a “Release Notes” page in the documentation (Help -> Release notes), always in sync with the latest version.
Improved
- UI library: updated to the latest version for overall stability and appearance improvements.
- Update notification: after updating, LinFIR now shows a small, dismissible “See what’s new” prompt instead of automatically opening a large release notes window.
[1.3.12] - 2026-08-25
Fixed
- Audio crackling on Windows (ASIO): boosted the priority of ASIO audio threads to reduce crackling that could occasionally occur during measurements.
Improved
- Audio library: updated to the latest version for overall stability improvements.
[1.3.11] - 2026-08-23
Added
- IR window envelope preview: adjusting IR windowing (start/stop time, drag, Auto Set Window, Reset Window, or toggling Adaptive Window) now briefly overlays the window’s shape in red on the Impulse Response and Step Response graphs, scaled to the curve’s own peak. The overlay stays visible for 3 seconds after the last change, then fades out over 2 seconds. With Adaptive Window enabled, it shows a gradient of fade-out curves - one per frequency band, darkest (and drawn on top) for the highest frequencies.
- Verbose logging setting: a new toggle in Settings -> General -> Diagnostics raises the application log to
debugdetail on demand, without restarting or a command line. Enable it when asked to, reproduce the issue, then use Help -> Report a Bug to send the log.
Improved
- Maximum number of drivers: increased from 10 to 50 per project.
- Documentation: clarified what the magnitude correction filter’s Correction Gain does - a single, uniform gain applied within the configured frequency range to compensate for the level loss introduced by the from-the-top equalization - and how to inspect the filter’s final response (gain included) in the graph bar’s FIR tab to avoid excessive gain on a given band.
- Log verbosity: routine tracing that used to fire continuously while dragging any parameter (LinFIR recomputes filters live), and audio ring-buffer overflow warnings that could log on every callback during an overrun, are now much quieter by default - the log file stays focused on events that matter. Full detail remains available via the new Verbose logging setting.
Fixed
- ASIO capture failures (
loadDriverreturned false): the automatic device hotplug detection added in 1.3.8 could race against a capture that was starting at the same time - both tried to load the ASIO driver concurrently, and ASIO only allows one loaded driver at a time. The hotplug check now defers to an in-progress capture instead of racing it. - Undo/redo debounce with multiple driver/measurement windows open: dragging a value no longer records one undo step per intermediate value when a second driver or measurement window is open at the same time.
[1.3.10] - 2026-07-28
Improved
- Airplay / wireless device support: automatic detection of Airplay, HomePod, Sonos, and similar streaming devices; adjusts timing constants (extended pre-silence, post-silence, and chirp detection delay) to compensate for network latency
- Deconvolution noise reduction: minor improvements to limit deconvolution noise and artifacts via smooth tapering at the beginning and end of the averaged recording.
Added
- h2/h1 contamination guards: measurements are now rejected when the second harmonic (h2) falls inside the h1 zone (reduce Manual offset) or when h1 arrives before the truncation point (increase Manual offset or check acoustic distances). A permanent toast notifies the user with guidance for each case.
[1.3.9] - 2026-07-22
Improved
- Spectrogram image quality and performance: the spectrogram now uses bilinear interpolation for smoother, higher-quality rendering, and has been optimised with parallel processing for faster display updates.
- Directivity sonogram normalization: added a new “Normalize to ±10° avg (per freq)” mode that normalises each frequency column to the average magnitude between −10° and +10°, providing a more robust reference than the single 0° point when narrow on-axis peaks or dips are present. A 20 kHz cap on normalization references now applies to the Global max. and Normalize to 0° modes, preventing tweeter ultrasonic resonances from skewing the colour scale.
[1.3.8] - 2026-07-21
Added
- Audio device hotplug detection: the audio settings page now automatically detects when speakers or microphones are connected or disconnected, and refreshes the device list without requiring a manual click.
- Directivity Sonogram (-6 dB curves): thin grey reference lines now appear on the sonogram plots, marking the -6 dB beamwidth curves. A matching grey mark also appears on the colour bar for quick level reference.
- Sonogram Normalization dropdown: three normalization modes control how sonogram magnitudes are mapped to dB — Global max. (single reference from the strongest data point), Normalize to 0° (single reference from the strongest on-axis measurement across all frequencies), and Normalize to 0° (per freq) (each frequency column normalised to its own 0° value, revealing per-band directivity patterns).
Improved
- Plot axes: grid spacers and tick formatters replaced with dynamic frequency formatting — axes now show meaningful labels at every zoom level
- Documentation: faster fallback when online documentation is not available
- Audio library: updated to the latest version for overall stability improvements
- Harmonic distortion windowing: replaced fixed 5% tapers with an adaptive windowing algorithm for individual harmonic slices. The analysis now dynamically strips background noise before and after each impulse peak while automatically preserving long distortion tails, ensuring cleaner measurements without cutting off legitimate decay.
[1.3.7] - 2026-07-13
Added
- Rotation Table (Pololu Tic): new Go to 0°, Energize, and De-energize buttons in Settings -> Rotation Table
Improved
- Harmonic distortion: recomputing THD after a windowing or delay-compensation change is now much faster — the expensive per-harmonic spectra (H2-Hn) are cached and only recomputed after a new capture or a sample-rate change, instead of on every window adjustment
Fixed
- Rotation Table auto-scan: fixed a hang after the table’s first move when the Settings window was closed — the table position is now refreshed every frame regardless of which window is open
[1.3.6] - 2026-07-09
Fixed
- macOS/Windows crash at launch:
libusbis now compiled statically into the binary (rusbvendored feature); the app no longer depends on an externallibusb-1.0.0.dylibfrom Homebrew and will launch correctly on machines where Homebrew is not installed
[1.3.5] - 2026-07-08
Added
- Rotation Table support: connect and control a motorized turntable directly from LinFIR — supported controllers are Pololu Tic (T500, T834, T825, T249, 36v4, detected automatically via USB) and GRBL-based boards (Arduino, e.g. Audiomatica Medusa, connected via serial); the new Settings -> Rotation Table tab provides a live position dial, manual jog controls, and a zero-point reset button
- Auto-scan (requires a valid license): in the IR Management window, a ▶ Scan button drives the rotation table through a configurable angle range (min, max, step) and captures an impulse response at each position automatically — already-measured angles are skipped; a 30-second per-angle timeout guards against mechanical failures
- New C array export format options (f32 and f64) for FIR filters
Improved
- Documentation: the documentation printing experience is now fully supported — text is black on white, images use the light theme variant, and all UI chrome is hidden for a clean printout
- UI library updated to the latest version, bringing general bug fixes and stability improvements; note: a multi-monitor window positioning issue may still occur on Windows
[1.3.4] - 2026-06-08
Improved
- Harmonic distortion extraction: the HD slices are now cut at the minimum of the smoothed Hilbert envelope between each pair of adjacent theoretical peaks, maximising separation between harmonics
- Harmonic distortion windowing: replaced the h1-synchronised window with an independent automatic windowing; this is more robust for harmonics whose impulse response spreads significantly further in time than h1
[1.3.3] - 2026-06-07
Added
- Distortion IR window (shortcut J, View menu, requires a valid license): visualises the time-domain harmonic impulse responses H2..H5 extracted by the Farina ESS method; each curve is the same windowed slice used to compute the THD spectrum so the display is fully consistent with the distortion graphs; per-harmonic visibility toggles, independent per-harmonic normalisation, zoom/pan with double-click reset; the displayed angle follows the global angle selector
Improved
- Spectrogram: the window now follows the global angle selector — when a non-zero angle is selected the spectrogram shows the predicted sum IR for that angle (same data as the impulse graph in Drivers mode); the window title and in-window header update accordingly; on-axis behaviour is unchanged
Fixed
- THD formula corrected: harmonic distortion (total and individual) is now normalised by the fundamental level (H1) in accordance with the standard THD definition —
THD = √(H2² + H3² + H4² + …) / H1; previously the denominator was the total RMS signal (fundamental + harmonics), which capped the displayed value at 100% and caused the curves to underestimate distortion at high harmonic levels (below resonance or at high SPL); values above 100% (0 dB in relative mode) are now correctly displayed - Harmonic distortion windowing: H2–H5 are now windowed using the start and stop boundaries configured for H1 in Time Windowing, improving SNR and eliminating room echoes from the harmonic distortion estimates
[1.3.2] - 2026-04-29
Added
- Spectrogram window (shortcut W, requires a valid license): time-frequency colour map of the predicted on-axis sum IR (Loudspeaker) or averaged IR (Room Calibration); choose between CQT (Morlet filter bank, constant-Q) and STFT (Hann window); adjustable resolution preset, colormap dB range, and axis swap (time ↔ frequency)
- Directivity Analysis: new Overlay Plot tab showing all off-axis frequency response curves superimposed, one rainbow-coloured line per angle, with angle/frequency/magnitude tooltip on hover
- Directivity Analysis — Overlay Plot: angle range filter (All / ≥ 0° / ≤ 0° presets + drag-value min/max), defaults to 0°–180°
- Directivity Analysis — Overlay Plot: Normalize to 0° toggle — divides each curve by the on-axis response to display relative deviation
- Directivity Analysis — Sonogram: Colormap dB range controls — drag min/max dB values to saturate the colour scale and reveal low-amplitude detail; a Reset button restores the defaults
Improved
- Directivity Analysis: renamed from “Directivity Sonogram” to “Directivity Analysis”
[1.3.1] - 2026-04-19
Added
- Frequency graph (Drivers mode): the IIR Auto EQ target curve is now displayed as an overlay on the frequency response graph when the IIR window is in the foreground and the Auto EQ tab is selected; the overlay is automatically hidden when the window is sent to the background
Improved
- Auto EQ: improved filter initialization: filters are now placed using a score that trades off residual magnitude against proximity to already-placed filters, preventing wide low-Q filters from masking the residual error they leave behind and causing subsequent filters to be initialized in the wrong place
- Auto EQ (driver and global): Q Min and Q Max now use adaptive bounds: increasing Q Min automatically pushes Q Max up if needed (up to 20), and decreasing Q Max pulls Q Min down if needed (down to 0.1), so the two values can no longer cross; both parameters now share the full 0.1–20 range
Fixed
- HFD example in the documentation: the Tweeter was mapped to channel 1 which is inconsistent with Hypex plate amplifiers
[1.3.0] - 2026-04-15
Improved
- Auto EQ: improved algorithm to better respect the configured gain limits and boost cap
- Adaptive Window: upgraded internal wavelet transform from CDF 5/3 — the biorthogonal wavelet now used is CDF 9/7, which provides ~40 dB of stopband attenuation versus ~18 dB for CDF 5/3; this significantly reduces spectral leakage between frequency bands before temporal masking is applied, eliminating the frequency ripples that could let high-frequency echoes bleed through the window boundary
- UI framework updated to the latest version
- Documentation: microphone calibration phase column clarified — files with a third phase column are accepted but ignored; phase is reconstructed from magnitude via Hilbert transform, which is more robust given measurement microphones’ predominantly minimum-phase behavior
- Documentation: buffer size guidance corrected — buffer latency is compensated internally; the only criterion is avoiding underruns
- HFD export: the patch/create mode is now a dropdown (Create from template / Patch existing Config.xml) instead of a toggle button, making the choice more explicit
- HFD export: the channel mapping panel now uses the term “Channel” instead of “Group”; the description clarifies that each channel receives the FIR filters, IIR filters, gain, delay, and polarity of the assigned LinFIR driver; by default, drivers are assigned to channels sequentially (driver 1 -> channel 1, driver 2 -> channel 2, …); if there are more channels than drivers, the last driver is repeated for the remaining channels
- HFD export: the output directory field is removed; clicking Apply mapping and export in Create from template mode now opens a Save As dialog (pre-filled with
Config.xml); in Patch mode the selected file is overwritten directly, with no extra dialog - HFD export: a confirmation message is displayed after a successful export, showing the path of the written file
- Documentation: HFD section updated to clarify that the exported file is Config.xml, the native project format opened by Hypex Filter Design software
- Settings: Adaptive Crossover Smoothing moved from Settings -> General -> Default Values to Settings -> Graphs -> Display — it controls graph rendering for the current project and is not a new-project default value; documentation updated accordingly
- Graphs: “Adaptive Crossover Smoothing” renamed to “Steep Crossover Smoothing” — smoothing reduction is now proportional to the filter slope; no effect below 12 dB/oct (LR2), full reduction at 36 dB/oct (LR6+), proportional in between
- UI: boolean options have been replaced by an iOS-style toggle switch throughout the application for improved readability
Added
- Two new IIR filter types: Asym Low Shelf and Asym High Shelf, available in per-driver IIR filters and global IIR filters; both expose F1/Q1 (zeros) and F2/Q2 (poles) parameters; the High Shelf variant is normalised so that the DC gain is always 0 dB
- HFD export: driver alignment delays are now validated against the 19.2 ms hardware limit; an error is shown if any driver exceeds this value, preventing a silent export with incorrect timing
- HFD export: first-order high-pass and low-pass filters (Butterworth order 1) are now exported as
ftHighPass1/ftLowPass1instead of the second-order variant; odd-order filters (e.g. Butterworth order 3) correctly export the first-order section asftHighPass1/ftLowPass1and the remaining second-order sections asftHighPass2/ftLowPass2 - Auto EQ: new Auto-generate toggle in the IIR Auto EQ tab (per-driver and global) — when enabled, filters are automatically re-generated whenever any parameter in the Auto EQ tab changes; requires a valid license
- Sync X-axis: the button is now active by default for all new projects
- Settings -> General -> Default Values for New Projects: new “Sync X-axis” option to configure whether X-axis synchronisation is enabled or disabled by default for new projects
- IR Management window: each measurement in the angle list now shows an ℹ icon; hovering it displays the measurement source (measured with LinFIR or imported), sweep parameters (frequency range, duration, level, averages), and IR length
- Frequency, phase, and group delay graphs (Drivers mode): a dashed pre-filter overlay is now available for each driver and for the sum (requires a valid license); the overlay shows the unfiltered speaker response and group delay/phase when the corresponding filter window (LP, HP, correction FIR, IIR, or global filters) is open; toggled in Settings -> Graphs -> Response Overlays
Fixed
- HFD export: Bessel filters of order 1 are not supported by the HFD hardware; the export now raises an error if such a filter is detected on any driver; in FusionAmp mode the per-driver IIR filter UI enforces a minimum order of 2 for Bessel filters, preventing the configuration of an unsupported filter
- Frequency graphs (IIR Filters, FIR Filters, FIR+IIR Filters modes): the Y-axis lower bound no longer drops to the configured limit (~−100 dB) when only EQ-type filters are active (PEQ, shelves, all-pass, Asym Low/High Shelf); the deep lower bound is now applied only when at least one true high-pass or low-pass filter is present in the relevant filter set
- Frequency graph (Drivers mode): Listening Window curve is no longer displayed when only a single driver is active and no global filters are applied — it now follows the same visibility rules as the Sum curve (requires multiple drivers with IR data, or at least one driver with active global filters)
- About window (Windows): clicking “Read terms in browser” or “Open in browser” no longer causes a black console window to flash
- Directivity Sonogram: the sonogram no longer remains visible after measurements have been cleared — the cached images are now properly discarded when the async computation returns no data
- IR Management window (Hypex FusionAmp mode): the off-axis section (axis selector, angle list, measurement angle input, Export All) was missing — it now appears identically to Loudspeaker Design mode
- Phase graph (Drivers mode, off-axis angles): in time-centered phase and unwrapped mode, the linear phase reference was incorrectly taken from the on-axis sum instead of the sum at the selected angle; individual driver curves and the sum could appear misaligned when viewing off-axis measurements
- Phase graph (Drivers mode, unwrapped): individual driver curves could be offset by a multiple of 360° relative to the sum when steep high-pass crossover filters were active; the DC alignment now only uses in-band frequencies (within each driver’s passband) to avoid corruption by the out-of-band phase ramp introduced by the crossover
- IIR filters: setting a Bessel filter order to 0 via keyboard arrows caused a crash; the filter design now returns a pass-through (no filtering) for order 0
[1.2.21] - 2026-03-25
Fixed
- License activation: fixed a crash with “Invalid response: Failed to parse validation response: expected value at line 1 column 1” — the HTTP status was not checked before parsing the API response body; any non-success response (Cloudflare challenge, rate limiting, transient server error) now returns a clear error message instead of a JSON parse failure
- macOS full-screen: secondary windows (filters, IR management, etc.) no longer open as a tab inside the full-screen space — they now float above the main window as expected; this also fixes the black empty space that appeared when a resizable window was opened in full-screen mode
Added
- Several windows whose content is variable in length are now resizable
Added
- Frequency graph (Speakers mode): Listening Window curve (requires valid license)
- Displayed alongside the Directivity Index when off-axis measurements are available
- Defined as the spatial average of all measurement angles within ±30° horizontal and ±10° vertical (inclusive)
- Shown only when at least 2 qualifying angles are available to average
- Global FIR magnitude correction and global Auto EQ: new “Reference” option (requires valid license)
- Choose between On-axis (default) and Listening Window as the magnitude reference for correction
- When set to Listening Window, the correction targets the spatial average of ±30°H / ±10°V angles instead of the on-axis response
- Falls back to on-axis automatically if fewer than 2 qualifying angles are available
[1.2.20] - 2026-03-18
Fixed
- ASIO (Windows): measurements no longer abort with a spurious “timing reference signal too weak” warning despite the signal being correctly configured — note that ASIO stream startup can take significantly longer than on other platforms; this delay is now properly accounted for before any signal level check is performed
- Hypex mode: several features that were incorrectly restricted to Loudspeaker Design mode now work as expected — affected areas include phase display options, per-driver filter curve views, and the detailed report export
- Phase graph: auto-bounds vertical axis now enforces a minimum range of ±1° around the data centre, preventing near-flat phase curves (e.g. a Dirac) from zooming into numerical noise
- Phase / group delay graphs: toggling visibility via keyboard shortcuts (G / P) no longer leaves the graphs empty
[1.2.19] - 2026-03-12
Fixed
- Hypex mode: the directivity sonogram window is now accessible
- Hypex mode: exporting FIR coefficients now works correctly
[1.2.18] - 2026-03-10
Added
- Phase correction FIR: auto-correction guard for magnitude artifacts
- LinFIR automatically iterates f_min and f_max in 1/3-octave steps (up to 100 iterations, f_min ceiling 15 kHz, f_max ceiling 18 kHz) until the FIR magnitude deviation falls within the per-filter tolerance
- Guard Tolerance parameter added to each phase correction filter (driver and global): 0.1–15 dB, default 0.5 dB
- A warning toast is shown only when the guard fails (exhausts all iterations without converging); warnings can be disabled in General Settings -> “Warn when phase FIR guard fails”
Improved
- Phase and group delay graphs: auto-bounds for the vertical axis now ignore data above 20 kHz, preventing ultrasonic content from distorting the scale
- Phase graph: auto-bounds no longer force the 0° value to be visible; the axis now fits tightly to the actual data range (± 10% margin)
- Graph toolbar: graph type toggles, time domain options, and phase options are now grouped into three dropdowns (“Graphs”, “Time Domain”, “Phase Options”), reducing clutter in the toolbar; dropdowns stay open when toggling checkboxes inside them
- Software update notification moved from the toolbar to a persistent floating card anchored to the bottom-right corner, with a dismiss button and an Install button; after a successful update a permanent closable toast confirms the installation
[1.2.17] - 2026-03-06
Added
- Hypex FusionAmp project modes with hardware-specific constraints (requires valid license)
- Sample rate locked at 93.75 kHz for all FusionAmp modes
- Fixed driver count matching hardware specifications (cannot add/remove drivers)
- Two FIR processing modes:
- FIR IN: Global FIR correction at DSP input (4500 taps maximum including padding)
- FIR OUT: Per-driver or global FIR at DSP output (1500 taps maximum per driver including padding)
- IIR filter constraints: 15 biquads maximum per channel
- Real-time biquad counter with color-coded warnings in IIR filter UI
- Filter types and orders dynamically limited to prevent exceeding biquad capacity
- Phase correction FIR magnitude artifact detection (per-driver and global)
- After computing the phase correction FIR, LinFIR evaluates its magnitude response and warns if any bin deviates by more than 0.5 dB from 0 dBFS
- A phase-only filter should leave magnitude unchanged; deviations indicate a filter design problem
- Warning toast is shown with actionable advice: reduce Kaiser beta, increase tap count, or raise the minimum correction frequency
- Disableable in General Settings
- Target curve import/export (all target curve windows: per-driver FIR, per-driver Auto EQ, global FIR, global Auto EQ)
- Import: loads control points from a plain-text file (two columns: frequency Hz, gain dB; separator: tab, space or comma; comment lines starting with # are ignored; minimum 2 valid points required; points are sorted by frequency on import)
- Export: saves current control points to a plain-text file with a two-column tab-separated format and commented header
- Microphone calibration plot preview: each calibration file in Settings -> Mic Calibration now has a Plot button that opens a dedicated window showing its frequency response on a log-frequency axis
Improved
- All secondary windows (filter windows, IR windows, export dialogs, HFD window, FRD converters, detached graphs…) are now automatically closed when loading or creating a project, preventing stale windows from a previous session from cluttering the workspace; the Settings window is additionally closed on application startup
- Clipping detection test signal replaced by a deterministic periodic pink-noise buffer
- New signal: frequency-domain pink noise (−3 dB/octave ASD), generated once per sample rate at startup and cached in memory
- Schroeder initial phases + Newman/CFR iterative crest-factor reduction
- Band-shaped: 12 dB/oct high-pass at 20 Hz, 24 dB/oct low-pass at 20 kHz
- RMS = −18 dBFS, peak ≤ 0 dBFS (crest factor ≈ 12 dB — representative of real programme material)
- Documentation: added warning against using phase correction with non-anechoic measurements in both driver-processing and system-processing sections
Fixed
- Multi-average capture: input gain compensation is now applied in the audio callback instead of post-capture, so level validation (signal-too-weak check on timing reference) correctly sees the compensated signal
- Multi-average capture: sweep segments are now aligned with GCC-PHAT before averaging, using their individual deconvolutions as alignment references; removes the naive arithmetic average that could blur transients in the presence of inter-sweep timing jitter
- Audio Settings: switching to an input device that doesn’t support the current sample rate now automatically selects the closest supported rate and shows an info toast; previously the sweep was generated at the old rate while the device ran at its own rate
- Documentation: breadcrumb bar hiding the search panel
- macOS: project files (.lnf) hidden in Finder after save
[1.2.16] - 2026-02-19
Added
- Driver copy/paste parameters
- Copy button on each driver copies all its parameters to a clipboard (IRs and driver name are excluded)
- Paste button applies the copied parameters to any other driver, preserving the target driver’s IRs and name
- Paste button is grayed out when the clipboard is empty
- Useful for quickly duplicating filter settings, crossover configuration, or DSP parameters across drivers
- Default crossover frequencies applied when adding a new driver
- Driver 1: HP=1 Hz, LP=110 Hz (subwoofer)
- Driver 2: HP=110 Hz, LP=600 Hz (bass/low-mid)
- Driver 3: HP=600 Hz, LP=3000 Hz (midrange)
- Driver 4+: HP=3000 Hz, LP=21000 Hz (tweeter)
- Automatic measurement cancellation on signal problems
- Clipping on main channel: measurement stops immediately when any input sample hits digital full scale, without waiting for sweep completion
- Clipping on timing reference channel (Electric and Acoustic): measurement stops if the chirp clips on the reference input channel
- Timing reference too weak: if the peak on the timing reference channel never exceeded −25 dBFS during the chirp window, the sweep is cancelled before it begins (Electric and Acoustic modes, regardless of number of averages); toast reports the measured level
- Low signal on first sweep (multi-average only, ≥ 2 averages): if the peak input level never exceeded −25 dBFS on the first sweep, the measurement is cancelled before the second average begins
- Real-time input level (dBFS) displayed during capture with color coding: green (good), orange (near saturation), red (clipping)
- Timing reference chirp now has short Hann fade-in and fade-out (1% of chirp duration each)
- Eliminates clicks caused by the abrupt onset and end of the chirp signal
- CLIO time-domain IR import (.txt files exported from CLIO in time domain)
- 3-column format: Time[s], Real[Pa], Imag[Pa] — the Imag column is ignored
- Sample rate is inferred from timestamps and snapped to the nearest standard rate (same algorithm as TMD)
- Auto-detected by the presence of the Time[s] header line, requiring no manual configuration
Improved
- Channel selectors (mic input, timing reference output/input) replaced with dropdowns
- TMD file import now snaps the inferred sample rate to the nearest standard rate (44.1, 48, 88.2, 96, 176.4, 192, 384 kHz…) when within 1% tolerance
- Corrects systematic sample rate errors caused by limited timestamp precision in TMD files
- Prevents subtle pitch/speed deviations that would otherwise affect the imported impulse response
Fixed
- Phase curve alignment in Loudspeaker Design mode (time-centered phase and unwrap)
- Unwrap + time-centered: DC offset (absolute phase reference) for all curves — drivers and the filtered Sum — now anchored to the pre-filter sum phase; previously the filtered Sum had a different DC origin, making it appear shifted vertically relative to the drivers
- Unwrap without time-centered: all curves (drivers + Sum) are now consistently aligned to the filtered Sum as reference; previously activating the pre-filter reference unconditionally caused a vertical offset on the Sum curve in this mode
- Adaptive wavelet windowing now covers the same physical frequency bands regardless of sample rate
- Number of levels is now derived from target minimum frequency (5 Hz) relative to Nyquist, ensuring coverage down to ~5 Hz at all sample rates (48, 96, 192 kHz…)
- Previously, at higher sample rates (e.g. 96 kHz), the cap prevented the lowest frequency bands from being reached, resulting in inconsistent temporal extensions for bass frequencies
- Keyboard shortcuts now work correctly when Settings window is open in background
- Main window shortcuts were incorrectly blocked whenever Settings window was open regardless of focus
- Settings window now only handles shortcuts when it has focus
- License tab disables shortcuts when Settings has focus to allow typing in text fields without triggering application shortcuts
[1.2.15] - 2026-02-17
Added
- Microphone calibration settings page
- Dedicated settings tab for managing microphone calibration files
- Scrollable list displaying all imported calibrations with sensitivity factor and frequency point count
- Default calibration selector for automatic application to newly created drivers
- Import/delete controls for each calibration file
- Spacebar keyboard shortcut to interrupt sweep measurements at any time
- Provides instant emergency stop during capture
- Works alongside Stop Capture button for multiple interruption methods
Improved
- Microphone calibration workflow enhancements
- Default calibration automatically applied to new drivers and new projects
- Deleting a calibration file automatically resets affected drivers to None
- Per-driver calibration selection moved to IR Management window for better context
- Adaptive windowing now uses wavelet transform for frequency-dependent IR windowing
- Replaced 10-band FIR filter bank approach with CDF 5/3 biorthogonal wavelet decomposition
- ~10× performance improvement
- Start windowing applied uniformly in time domain, stop windowing applied adaptively in wavelet domain
- Delay compensation with sync toggle for consistent measurement delay compensation
- New Sync toggle (enabled by default) automatically applies delay adjustments to all drivers
- Stop Capture button visual design during measurements
- Red button with white text matching Reset button styling
- Increased size for better visibility and accessibility
- Appears only during active capture for unambiguous emergency stop
- IR Management window behavior during measurements
- Window remains on top of all other windows during capture
- Window maintains keyboard focus throughout measurement for reliable spacebar interruption
- Prevents accidental loss of control if user clicks elsewhere during sweep
- Automatically returns to normal window level when measurement completes or is stopped
- Documentation navigation enhancement with sticky breadcrumb indicator
- Added breadcrumb banner below menu that tracks current position during scroll
- Helps users orient themselves in long documentation pages
- Improves navigation experience for complex multi-section pages
[1.2.14] - 2026-02-13
Added
- Individual harmonic distortion curves (H2, H3, H4) displayed on HD graph
- HD graph now shows detailed breakdown of harmonic components in addition to total harmonic distortion
- Individual harmonic curves require a valid license (total harmonic distortion remains available to all users)
- Provides deeper insight into distortion characteristics and system non-linearity
- HD display mode selector with three visualization options
- Percent (%) mode: Traditional percentage representation relative to total RMS
- dB (relative) mode: Harmonic distortion relative to total RMS in decibels
- dB (absolute) mode: Absolute level of harmonics without normalization
- Dropdown control added to graph toolbar before smoothing selector
- Mode applies to both total HD curve and individual harmonics (H2, H3, H4)
- Useful for comparing distortion levels across different SPL measurements and evaluating signal-to-distortion ratio
- Driver offset parameters in FRD file import window
- New X (horizontal) and Y (vertical) offset fields allow specifying driver position relative to baffle plane
- Enables reconstruction of relative time-of-arrival delays that may have been removed during FRD file creation
- Critical for accurate off-axis interference simulation around crossover frequencies
- Automatically calculates geometric delays based on listening angles and driver positions
- Improves accuracy of multi-driver system simulation from imported frequency response data
- TMD file format support for impulse response import
Improved
- Exponential sine sweep measurement system completely redesigned
- Single-pass averaging: Timing reference eliminates need for multi-pass alignment, enabling more efficient averaging workflow
- Reduced deconvolution artifacts: Improved signal processing prevents artifacts during impulse response extraction
- Automatic sweep end frequency: f_end now automatically calculated to optimize harmonic distortion SNR (1/96 octave before Nyquist)
- Simplified measurement workflow: End frequency parameter removed from UI, managed automatically based on sample rate
- Measurement capture stop behavior improved for graceful interruption
- Stop button now immediately interrupts sweep in progress instead of waiting for completion
- Sweep signal automatically attenuated with fade-out to prevent audio clicks and pops
- Enables quick measurement cancellation without disruptive audio artifacts
- HD graph replaces THD nomenclature
- Graph renamed from “THD” to “HD” (Harmonic Distortion) for clarity
- Keyboard shortcut (K) remains unchanged
- Updated throughout UI and documentation
- Documentation dark theme (coal) with darker background and lighter text for improved readability
[1.2.13] - 2026-01-29
Added
- Batch import for multiple measurement files with automatic angle parsing
- Import multiple IR files simultaneously with multi-file selection
- FRD converter parameters (sample rate, delay, extrapolation modes) automatically applied to all files in batch
- Manual FIR delay compensation visibility control (advanced setting)
- New “Show manual FIR delay compensation” option in Settings -> General -> Filter Processing
- Hidden by default to prevent accidental filter misalignment
- When disabled, all FIR compensation delays are automatically forced to 0
- Marked as advanced setting (⚙) with warnings about signal processing knowledge requirements
- Affects both per-driver “FIR Offset Delay” and global “FIR compensation delay” fields
Improved
- Driver control interface clarity with organized section headers
- Added colored section labels: “FIR Filters”, “IIR Filters”, and “Driver Adjustments”
- Replaced ambiguous “Visualization Controls” with clear “Driver Adjustments” label
- Improved visual hierarchy with consistent spacing and separators
- Better organization distinguishes signal processing filters from gain/delay/polarity adjustments
Fixed
- FIR correction frequency range controls now use proper undo debouncing
- Fixed issue where dragging frequency min/max sliders created separate undo history entries for each incremental value change
- Off-axis sum calculation now correctly handles missing measurements per driver
- Fixed bug where drivers without measurements at a specific angle would incorrectly use their on-axis (0°) measurement as fallback
- Fixes issues with directivity sonogram displaying incorrect data at extreme angles
- Directivity sonogram normalization now excludes Nyquist frequency artifacts
- Sonogram color scale normalization now limited to frequencies up to 24 kHz
- Prevents measurement artifacts near Nyquist frequency from affecting visualization scale
- Default frequency axis bounds now limited to 24 kHz for cleaner visualization
Breaking Changes
- Distortion measurement storage structure has been changed
- Internal data structure for storing distortion harmonics has been completely redesigned
- Backward compatibility is NOT maintained: Projects with distortion measurements from versions < 1.2.13 are not compatible
- Re-measurement is required: Importing old IRs will not restore distortion data - you must re-measure to capture distortion with the new structure
[1.2.12] - 2026-01-25
Fixed
- Off-axis measurements now correctly calculated after FRD file import
- Fixed issue where importing FRD files (frequency response data) would not trigger off-axis response calculations
- Reduced log verbosity for Directivity Sonogram window
- Sum curve now displayed when some enabled drivers have no measurements
- Previously, sum curve was hidden if any enabled driver lacked a measurement
- Now, sum is calculated and displayed from all enabled drivers that have measurements
- Drivers without measurements are treated as if they were disabled
Improved
- Impulse response level validation now uses frequency domain analysis
- Previously checked instantaneous peak level in time domain
- Now computes FFT and checks maximum magnitude across all frequencies
- More accurate detection of low signal-to-noise ratio issues
- Warning triggered if no frequency has magnitude above -25 dB
[1.2.11] - 2026-01-24
Added
- Custom file icon for
.lnfproject files- LinFIR project files (.lnf) now display a custom icon in file explorer
- Works on Mac OS and Windows
- Improves visual identification of project files
[1.2.10] - 2026-01-23
Added
- Adaptive crossover smoothing option for magnitude curves near crossover frequencies
- Preserves crossover slope visibility by reducing smoothing within ±0.5 octave of cutoff frequencies
- Controlled via Settings -> General -> Adaptive Crossover Smoothing (enabled by default)
- Phase smoothing
- Phase curves can now be smoothed while preserving driver alignment
- Magnitude-based filtering applied before smoothing to eliminate out-of-band artifacts
- Provides cleaner phase visualization without compromising timing accuracy
- Butterworth 4th-order sweep tapering for reduced pre/post-ringing
- New sweep windowing mode with smooth frequency-domain tapering (24dB/octave rolloff)
- Significantly reduces pre-ringing and post-ringing artifacts in measured impulse responses
- Eliminates Gibbs oscillations at spectrum edges caused by abrupt frequency cutoffs
- Sweep extends to f_start/4 and f_end×4 with Butterworth filters centered at user frequencies
- Recommended for cleaner measurements (enabled by default)
- Available in Settings -> Audio -> Sweep Windowing: None (no tapering) or Butterworth 4th (24dB/oct)
- ERB (Equivalent Rectangular Bandwidth) smoothing mode
- Perceptually-motivated variable smoothing that follows the ear’s frequency resolution
- Available in the Smoothing dropdown menu (Drivers mode only)
Improved
- Off-axis response calculation performance significantly optimized
- Unified threading architecture eliminates race conditions between off-axis and directivity index calculations
- Substantially faster computation time through improved parallelization
- Directivity Sonogram updates automatically without requiring mouse movement
- Automatic impulse response noise truncation now limits IR length to 2 seconds after peak
- IRs are first truncated to 2 seconds maximum after the main impulse peak (maximum absolute value)
- Then trailing noise below 0.1% of peak amplitude is removed
- Minimum duration of 1.5 seconds is always preserved
- Improves processing performance and reduces file sizes for long IRs with extended decay
- Plot data resampling optimization using continuous logarithmic function
- Replaced fixed frequency bands with smooth exponential downsampling function
- Eliminates hard frequency band transitions for visually smoother plots
- More efficient computation
- Maintains perceptually constant point density across logarithmic frequency axis
- ASIO device compatibility now includes 24-bit sample format (I24) support
- Added I24 format to preferred and fallback format detection
- Improves compatibility with professional audio interfaces like Dante Virtual Soundcard
- Resolves “no compatible sample format found” errors with 24-bit ASIO devices
- Enhanced measurement safety warnings in confirmation dialog
- Added explicit low frequency warning about high energy bass content
- Warns against measuring unprotected tweeters or midrange drivers
- Clarifies potential damage risks from high excursion at low frequencies
- Sweep measurement parameters are now remembered per-driver
- Duration, level, frequency range, and averages are automatically saved to each driver
- Settings persist when closing and reopening the IR window
- New projects start with application default values, customizations are preserved in existing projects
- Default sweep parameters relocated to Audio Settings
- Moved from Settings -> General to Settings -> Audio Settings -> Measurement Configuration
- Now grouped with other measurement-related settings (sweep channels, calibration, timing reference)
- More logical organization: all measurement parameters in one place
Fixed
- Directivity Index not updating with latest off-axis data
- Race condition eliminated where DI could be calculated from stale measurements
- DI now guaranteed to reflect current off-axis responses
[1.2.9] - 2025-12-30
Fixed
- FIR filter export filenames now display correct tap count
- Fixed inconsistency where exported FIR filter filenames showed incorrect number of taps
- Tap count in filename now always matches the actual length of the exported filter
- Affects all export formats (CSV, WAV, bin, txt, Armonia) and both individual and batch exports
- Correctly reflects “per driver tap length” setting when enabled
- Log file rotation now properly enforces 4 MB size limit
- Previous implementation allowed log files to grow indefinitely (up to 188 MB observed)
- Oversized logs are automatically rotated and renamed with timestamp
- Only the 2 most recent log files are retained to manage disk space
Improved
- Bug report notifications now use toast messages
- Success notifications display for 3 seconds before auto-dismissing
- Error notifications remain visible until manually dismissed
- Error messages include manual submission instructions and support email
[1.2.8] - 2025-12-30
Improved
- Filter Export behavior: disabled drivers are now skipped
- FIR and IIR filter export now only exports filters from enabled drivers
- Disabled drivers (checkbox toggled off in Drivers toolbar) are automatically skipped during export
- Applies to all export formats and methods (individual FIR files, IIR files, and HFD export)
- Improves workflow efficiency by preventing accidental export of inactive driver configurations
- FIR Magnitude Correction taper standardized to quarter-octave
- Changed from 5% bandwidth taper to quarter-octave (1/4 octave) transition zones
- Matches the taper behavior of Auto EQ for consistency
- Provides smoother frequency transitions at the edges of the correction range
- Applies to both per-driver and global FIR magnitude corrections
[1.2.7] - 2025-12-27
Added
- FIR Filter Export: Stereo WAV formats
- New stereo export options: WAV i16 (stereo), WAV i24 (stereo), WAV f32 (stereo)
- Mono formats renamed to clarify: WAV i16 (mono), WAV i24 (mono), WAV f32 (mono)
- Filter is duplicated identically in both left and right channels for stereo files
- IIR Filter Export: MiniDSP format
- New export format option for MiniDSP processors
- Exports biquad coefficients in compact text format: biquad1, b0=…, b1=…, b2=…, a1=…, a2=…
- Available alongside existing FQG, CamillaDSP, and Q-SYS export formats in File > Export > IIR Filters
Fixed
- Directivity Sonogram flickering during parameter changes
- When modifying crossover or filter parameters, the sonogram would briefly disappear before reloading
- Sonogram remains visible and smoothly updates to new parameters without flickering
[1.2.6] - 2025-12-22
Added
- IIR Filter Export: Q-SYS CSV format
- New export format option for Q-SYS IIR Custom Filter components
- Exports biquad coefficients in CSV format: b0, b1, b2, a0, a1, a2 (one biquad per line)
- Supports all IIR filter types: Butterworth, Linkwitz-Riley, Bessel, PEQ, Low-shelf, High-shelf, Allpass (1st and 2nd order)
- Coefficients exported with 16 decimal places precision for maximum accuracy
- Available alongside existing FQG and CamillaDSP export formats in File > Export > IIR Filters
- Documentation enhancements
- New “Design Philosophy” section in Overview explaining LinFIR’s DSP-faithful, time-domain approach
- New “Impulse Response Timing Requirements” section in IR Management explaining 200ms peak delay limit and best practices
Fixed
- In same cases a deleted driver/measurement instance could lead to a crash
- Internal lists linked to drivers/measurements/ are now checked regularly to preserve coherence
- Long impulse responses with significant delays (>500ms) were being truncated during spectrum calculation
freqz()andfreqz_complex()now dynamically adjust FFT size to accommodate full IR length- Prevents artifacts and incorrect frequency response for IRs longer than the requested spectrum points
- Import rejection for excessively delayed impulse responses
- LinFIR now rejects impulse response imports where the main peak is located beyond 200ms
- 200ms corresponds to ~68 meters acoustic distance, indicating missing timing reference in measurement
- Prevents performance degradation from excessive zero-padding before useful signal
- Error message explains computational constraints and recommends proper timing reference methods
Improved
- Phase Correction Filter stability
- Improved algorithm robustness when correction band extends near Nyquist frequency
- Better noise handling in high-frequency regions
- Eliminates phase offsets and artifacts for cleaner, more stable impulse responses
- Auto Causal Alignment algorithm
- Now uses logarithmic energy distribution instead of simple first-significant-sample detection
- Positions FIR impulse peak based on energy ratio: if 30% of log-energy is before peak, places peak at 30% of FIR taps
- Prevents truncation of both pre-ringing and post-ringing artifacts in combined causal filters
- More robust with asymmetric impulse responses and complex filter combinations
- Clearer logging for debug
- Audio input channel defaults
- When selecting an input device with at least 2 channels available, LinFIR now automatically sets input channels to 2 instead of 1
- Applies both when manually changing devices and during initial device detection
- Electric loopback timing reference now defaults to channel 2 for both input and output (avoids collision with microphone on channel 1)
- Improves out-of-box experience for electric timing reference without manual channel configuration
- Documentation enhancements
- User Interface section has been moved to the beginning of the documentation (after Project Modes) for better pedagogical flow
- New comprehensive Graph Toolbar section in Graph Interaction page, now positioned at the top
- Added interactive zoom-on-hover for graph toolbar images (hover to zoom in on specific areas)
- Clarified Time-Centered Phase description (linear regression to remove linear phase component)
- Clarified Smoothing behavior (explicitly states which graphs are affected)
- Time-Centered Phase algorithm improvements
- Replaced phase regression method with IR peak position detection for more accurate bulk delay removal
- Provides more robust phase centering, especially for impulse responses with significant delays or complex phase behavior
- Applied to both graph display (time-centered phase toggle) and resampling algorithm (upsampling phase correction)
- Resampling algorithm optimizations
- Improved stability with long-delay impulse responses
- Reduced sinc filter length from 256 to 128 to minimize edge artifacts
- Upgraded interpolation from Linear to Cubic for better quality
- Reduced oversampling factor from 256 to 128 for improved numerical stability
- Spectrum calculation performance for long IRs
- Significantly reduces FFT size and computation time for IRs with long initial delays while maintaining accuracy
[1.2.5] - 2025-12-19
Added
- Documentation enhancements
- Added comprehensive “Performance Considerations” section in global-settings.md
- Explains LinFIR’s real-time filter processing architecture
- Documents filter application methods (FIR: fast convolution, IIR: difference equations)
- Performance impact factors: filter length thresholds, off-axis measurement considerations
- Background processing architecture for UI responsiveness
- Optimization recommendations for slower systems and complex projects
- Enhanced clipping detection documentation
- Clarified that warnings are purely about filter processing, not measurement levels
- Explained why phase processing can cause clipping even with flat magnitude responses
- Added technical details: 32-tone test signal (20 Hz - 20 kHz), 1.1 detection threshold
- Documented common scenarios: phase correction, all-pass filters, multiple FIR filters
- Added comprehensive “Performance Considerations” section in global-settings.md
Fixed
- Clipping detection test signal
- Corrected multitone test signal from 31 to 32 frequencies
- Documentation accuracy improvements
- Corrected Tukey window formula in ir-management.md to match actual implementation (was using undefined “\text{prog}” variable)
- Undo/Redo bug causing empty driver graphs
- Fixed issue where undo/redo operations would sometimes cause driver graphs to become empty
- Root cause: Restored measurements weren’t being resampled/recalculated due to cached state
- Solution: Invalidate resampling cache on snapshot restore to force complete recalculation
- Affects: Driver frequency response, phase, group delay, and impulse graphs after undo/redo
- Documentation refering to the View menu instead of Edit for the settings
- Buttons not showing in Sweep confirmation dialog
[1.2.4] - 2025-12-18
Added
- Documentation screenshots
- Documentation reorganization
- Added comprehensive “Target DSP Settings” section in driver-processing.md
- Consolidated sample rate, FIR length, per-driver tap lengths, and export padding documentation
- Added per-driver tap lengths screenshot showing UI changes when enabled
- Clarified that Filter length and Export padding controls relocate to individual driver sections when per-driver mode is active
- Removed redundant “Filter Length Configuration” section
Fixed
- Documentation accuracy improvements
- Removed Auto EQ workflow references from Manual Tab section in driver-processing.md
- Clarified locked filters usage in manual IIR filter design context
- Added comprehensive TXT file format documentation in Supported Formats section
- Documented TXT file metadata support (sample rate, distortion data, ESS parameters)
- Clarified that TXT files can contain either impulse samples or FRD format data
- Corrected sweep-measurements.md to reference 🎤 Measure button (was incorrectly called “Capture”)
- Added documentation for measurement confirmation dialog and skip option in settings
- License validation offline behavior
- Fixed infinite validation loop when machine is offline
- IR import validation improvements
- Added file extension validation (only .wav, .txt, .frd supported)
- Added data validation to reject empty files, single-sample files, and files containing NaN values
- Improved error messages with reference to documentation for unsupported formats
[1.2.3] - 2025-12-17
Fixed
- Documentation theme customization
- Fixed theme selector to show only Auto, Light, and Coal themes
- Corrected inconsistent styling between auto mode and manual theme selection
- Ensured proper LinFIR branding colors across all themes
[1.2.2] - 2025-12-17
Improved
- Auto Detect Delay now applies minimum delay across all drivers
- Previous behavior: Applied delay compensation only to the current driver
- New behavior: Detects delay for all drivers and applies the minimum delay to all simultaneously
- Benefits:
- Preserves temporal alignment between drivers automatically
- Removes common propagation delay from all measurements
- Prevents manual alignment errors when setting up crossovers
- Detection method: Uses peak position of on-axis measurements for precise alignment at zero
- Manual adjustment still available for individual drivers if needed-
- Documentation access prioritizes online version
- When accessing documentation (Help > Documentation / H key), LinFIR now attempts to open the online documentation at https://demaudio.com/doc/linfir/ first
- If no internet connection is available or the online version is unreachable, automatically falls back to the embedded local documentation server
- Benefits:
- Users always access the latest documentation updates when online
- Seamless offline access with no additional configuration required
- FRD Converter: Configurable magnitude extrapolation modes
- Added separate extrapolation control for DC and high-frequency regions
- Two modes available:
- Constant: Flat extrapolation using endpoint value
- Roll-off: Applies smooth roll-off with adaptive curvature
- DC roll-off: 12 dB/octave high-pass characteristic for realistic low-frequency behavior
- HF roll-off: 12 dB/octave low-pass characteristic, compensates for upward slopes
- Default settings: Roll-off for DC, Constant for Nyquist
- Benefits:
- More realistic impulse responses from incomplete FRD data
- Prevents artifacts from abrupt extrapolation
- Maintains adequate signal level up to Nyquist frequency
[1.2.1] - 2025-12-13
Added
- Import validation warning for excessive delays
- When importing impulse responses from TXT or WAV files (excluding FRD files), LinFIR now detects the main peak position
- Displays a warning toast if the main peak is located beyond 20 ms
- Import validation warning for low signal levels
- When importing impulse responses from TXT or WAV files, LinFIR now checks peak signal level
- Displays a warning toast if peak level is below -25 dB
- Low levels often indicate poor signal-to-noise ratio, which can compromise correction filter quality and phase visualization accuracy
- Web-based documentation system
- Replaced in-app egui documentation with comprehensive mdBook-based documentation
- Embedded directly into the application binary for offline access
- Served locally via built-in HTTP server on port 3030+
- Features:
- 17 comprehensive documentation pages covering all LinFIR features
- Theme-aware screenshots with automatic dark/light mode switching
- Integrated search functionality
- Access via Help > Documentation (H key) or Menu > Documentation
Fixed
- HFD export driver naming bug
- Fixed issue where all drivers displayed as “Driver 1” in group-to-driver mapping dropdown
- Driver names now correctly show as “Driver 1”, “Driver 2”, etc. when not renamed
- Custom driver names are properly displayed when set by user
[1.2.0] - 2025-12-11
Added
- Room Calibration Mode
- New dual-mode project system: Loudspeaker Design (default) and Room Calibration
- Mode selection available in File menu
- Room Calibration features:
- Measurements are temporally aligned using GCC-PHAT (Generalized Cross-Correlation with Phase Transform) algorithm
- Subsample precision via parabolic interpolation of the correlation peak
- Measurements automatically averaged after alignment to create system impulse response
- UI adapted: “Drivers” renamed to “Measurements”, directivity features disabled
- Sweep output channel selector in IR window (excludes timing reference channel)
- Graph display shows only global filters (FIR and IIR), individual measurement curves hidden
- Export restrictions: Only global filters exported (FIR/IIR), HFD config and reports disabled
- Designed for in-room acoustic measurements and correction filter generation
- Preserves all loudspeaker design capabilities in Loudspeaker Design mode
- FRD to IR Converter utility window
- Integrated advanced FRD-to-impulse response converter directly into LinFIR
- Opens automatically when importing .frd or FRD-formatted .txt files
- Features:
- PCHIP interpolation with adjustable sampling frequency and low/high-frequency extrapolation modes
- Real-time visualization: Original + Interpolated FRD, Impulse Response, Reconstructed Response
- Quality metrics: data coverage percentage, reconstruction error analysis
- Minimum phase transformation option to eliminate pre-ringing
- Configurable delay compensation
- Phase display options: wrap/unwrap, with/without linear phase removal
- Replaces previous basic FRD import with full-featured converter from standalone frd-to-ir tool
- Direct integration: converted impulses automatically update the target driver measurement
- Directivity analysis tools (requires license)
- Polar measurement capabilities on both vertical and horizontal axes
- Off-axis curve visualization with selector in toolbar
- Directivity Index (DI) prediction curve
- New window displaying predicted directivity sonograms (vertical and horizontal)
- DI and sonograms reflect filtering choices between drivers
- Requires IR measurements preserving time of flight to accurately represent interference patterns between drivers
- Note: Directivity tools require a purchased license; other features remain free
Changed
- IR naming behavior
- Removed automatic renaming of impulse responses during import and measurement
- IR name field now preserves user-entered names across operations
- Users must manually name their IRs via the text field in the Driver IR window
- Previous behavior: IRs were automatically renamed to filename/timestamp on import/capture
- New behavior: Manual naming only, preventing unwanted name changes
Improved
- File saving optimizations
- Implemented compression to reduce file sizes
- Faster save operations with smaller project files
- Memory optimizations
- Reduced RAM usage through internal memory management improvements
- More efficient memory allocation and deallocation
- Performance optimizations
- Optimized calculations for improved app responsiveness
- Faster UI updates and graph rendering
Fixed
- Phase correction in upsampling
- Fixed phase artifacts in interpolated spectrum (above original Nyquist frequency)
- Algorithm now: calculates phase slope before resampling, removes it, enforces constant phase above old Nyquist, then restores temporal coherence
- Applies only to upsampling operations (e.g., resampling from 48 kHz to 96 kHz)
- Time-centered phase plot
- Limited phase slope calculation to 20 kHz maximum
- Prevents phase noise at high frequencies from affecting the centering calculation
- Applies to both Speakers mode and FIR/IIR filter modes
[1.1.20] - 2025-11-23
Fixed
-
Graph interaction improvements
- Fixed axis drag zoom not disabling auto-bounds
- Dragging on X or Y axes to zoom now correctly disables auto-bounds for the affected axis
- THD graph now only displays in Speakers/Drivers mode
- Previously shown in all display modes, now correctly restricted to Speakers mode only
- Maintains proper display in detached windows
- Fixed axis drag zoom not disabling auto-bounds
-
Configuration report export (TXT/PDF) fixes
- Fixed AutoEQ filters not being exported when AutoEQ tab is selected
- Filter type counting now correctly uses the active tab’s filters (Manual or AutoEQ)
- Correction Filters (PEQ) section now properly displays AutoEQ-generated filters
- Added missing Phase Correction FIR parameters to reports
- Now includes Phase Offset (degrees) and Kaiser β parameters
- Provides complete documentation of phase correction settings
- PDF report now includes biquad references for IIR filters
- Added “Biquads” column to IIR filter tables in PDF reports
- Displays biquad section numbers for each filter (e.g., “1” for single biquad, “1,2” for cascaded)
- Matches the biquad numbering shown in TXT reports and appendices
- Enables cross-referencing between filter definitions and biquad coefficient listings
- Fixed AutoEQ filters not being exported when AutoEQ tab is selected
[1.1.19] - 2025-11-20
Fixed
- Per-driver tap lengths toggle now correctly applies individual tap values to each driver
- Fixed bug where enabling “Enable per-driver tap lengths” would still use the global tap count
[1.1.18] - 2025-11-20
Improved
- Phase correction algorithm enhancement
- Upgraded from linear interpolation to PCHIP (Piecewise Cubic Hermite Interpolating Polynomial)
- Provides smoother, more accurate phase interpolation during correction process
- Graph state management refactoring
- Complete architectural cleanup of graph bounds and auto-bounds management
- Each graph now maintains its own saved bounds and auto-bounds flags independently
[1.1.17] - 2025-11-19
Added
- New direct phase correction algorithm
- Works directly with unwrapped phase instead of group delay integration
- Removes linear phase component before smoothing for stable, predictable corrections
- Better impulse symmetrization without arbitrary phase offsets
- More reproducible results across different correction parameters
- Band-limited correction with constant phase continuation outside the working band
- Preserves phase coherence and avoids group delay artifacts at band edges
- Phase offset control for phase correction
- Replaces binary polarity inversion with continuous phase offset slider
- Range: -180° to +180°
- Allows fine-tuning of phase alignment and acoustic polarity
- Controls impulse response symmetry to adjust pre-ringing introduced by phase correction FIR
- Applied after phase correction, before spectral synthesis
- Detached graph windows
- Right-click any plot -> “Open in separate window” to spawn a native window
- Multiple instances per plot type supported (e.g., several frequency plots)
- Windows are resizable and can be closed with Cmd/Ctrl+W
- Live rendering: detached plots update in real time and stay synchronized with the current project state
- Display-mode capture: each window renders using the mode captured at detachment (FIR/IIR/FIR+IIR/Speakers) without altering the main window’s mode
- Automatic phase alignment in unwrapped mode
- Phase curves are now automatically aligned when displaying unwrapped phase
- Removes phse offset differences between drivers/filters for easier comparison
- Works with or without time-centered phase enabled
- Speakers mode: aligns all drivers to the Sum curve
- FIR/IIR modes: aligns all filters to the first active filter
- Uses robust median-based offset calculation on passband (middle 50% of data)
- Eliminates random offsets caused by out-of-band noise and measurement artifacts
- Makes crossover phase continuity immediately visible
Improved
- Smart directional truncation for group delay and phase plots
- Graph truncation now respects the type of active filters (high-pass, low-pass, or both)
- High-pass filters only: truncates low frequencies below threshold
- Low-pass filters only: truncates high frequencies below threshold
- Both filters active: truncates both sides as before
- No LP/HP filters active: no truncation (e.g., when only using PEQ, shelves, or all-pass filters)
- Applies to all contexts: FIR, IIR, FIR+IIR combined, speaker responses, and global filters
- Provides cleaner visualization by showing only relevant frequency ranges
Fixed
- Undo/Redo no longer affects visualization controls (graph toggles, display mode, phase unwrapping, smoothing, etc.)
- FRD file import crash
- Fixed panic when importing FRD files with excessive group delay
- Added proper bounds checking for impulse response rotation to prevent array index overflow
- Import now handles edge cases gracefully without crashing
- FRD phase extrapolation artifacts
- Improved phase extrapolation beyond measured frequency range
- Now uses average group delay to maintain constant GD in extrapolated regions
- Prevents phase from diverging and creating negative group delay
- Eliminates impulse response artifacts in high/low frequency extrapolation zones
[1.1.16] - 2025-11-15
Improved
- Interface optimization for small windows
- Graph toolbar now adapts to window width
- Below 1300px width, toolbar splits into two rows
- First row: Display mode selectors (FIR/IIR/Drivers), graph toggles (Mag./IR/Step/G. Delay/Phase), THD
- Second row: Normalize, Sum Focus, Sync X-axis, Unwrap Phase, Time-centered Phase, Smoothing
Fixed
- Phase control buttons behavior
- “Unwrap Phase” and “Time-centered Phase” buttons now disabled (greyed out) instead of hidden when phase graph is not displayed
- Improves UI consistency and predictability
[1.1.15] - 2025-11-14
Improved
- Interface optimization for small screens
- Shortened button labels in graph toolbar for more compact display
- Reduced driver parameter column width for better space utilization
- Improved overall layout efficiency for laptop and smaller displays
[1.1.14] - 2025-11-10
Added
- Theme selector in Settings
- Moved theme selection (Light/Dark/System) from “View” menu to Settings > General > Appearance
- Now grouped with other appearance settings (UI Color Scheme)
- More intuitive access to visual preferences in a single location
- Time-centered phase display mode
- New “Time-centered Phase” toggle button in phase display controls (next to “Unwrap Phase”)
- Removes the linear phase component (constant group delay) from all driver phase responses
- Makes phase alignment between drivers easier to visualize and compare
- Keyboard shortcut: C key
- Available only in Speakers display mode
- Applies correction to all visible curves while preserving phase differences
- New default setting in Settings > General > Display: “Time-centered phase” dropdown (Enabled/Disabled)
- Controls whether time-centered phase is enabled by default for new projects
- Customizable magnitude plot bounds
- New “Magnitude Plot Bounds” section in Settings > General > Graphs
- “Drivers range (dB)”: Controls Y-axis range for speaker magnitude plots
- Default: 60 dB (from max_response - 60 to max_response + 5)
- Adjustable from 20 dB to 200 dB
- Allows fine-tuning the vertical zoom level for better resolution or overview
- “Filters lower bound (dB)”: Controls lower Y-axis bound for filter magnitude plots
- Default: -100 dB
- Adjustable from -20 dB to -200 dB
- Applies to FIR, IIR, and FIR+IIR filter magnitude plots
- Useful for examining filter attenuation characteristics
Improved
- Project data structure refactoring
- Consolidated all project-related data into a unified struct
- Backward compatibility maintained through legacy migration system
- Cleaner separation of concerns for future development
- Magnitude-threshold truncation replaces octave margins
- Group Delay and Phase truncation now use a magnitude threshold in dB below the maximum instead of octave-based margins
- New per-context settings: thresholds for Speakers, IIR, FIR, and FIR+IIR
- Default threshold set to -50 dB (configurable in Settings)
- UI updated: controls display values in dB below maximum
Removed
- “View” menu from menu bar
- Theme selection moved to Settings > General > Appearance
- Simplifies menu bar by consolidating appearance settings in one location
Fixed
- Phase display accuracy
- Removed fractional octave smoothing from phase curves
- Smoothing was introducing visual artifacts and local slope changes
- Could bias visual assessment of driver phase alignment
- Phase now displays raw calculated values without smoothing
- Group delay continues to be smoothed as before (not affected by this change)
- Results in more accurate phase representation for alignment analysis
- IIR and FIR+IIR phase/GD correctness
- Group delay is now computed from unwrapped phase for IIR and combined FIR+IIR, eliminating artifacts at phase wrap boundaries
- “Unwrap Phase” toggle now affects display only; underlying GD is always derived from unwrapped phase
[1.1.13] - 2025-11-07
Added
- Auto causal alignment setting
- New “Auto causal alignment” option in Settings > General > Filter Processing
- Automatically optimizes impulse response positioning when multiple filters with causality are active
- Detects first significant sample (>1/10000 of peak) and aligns it with crop window start
- Prevents pre-ringing truncation and maximizes useful signal capture
- Activates when: ≥2 FIR filters active AND at least one has non-zero causality
- Can be disabled for manual control over impulse positioning
- Enabled by default
Improved
- FIR filter convolution stability
- Improved impulse response alignment algorithm for causal filter combinations
- FIR correction gain application
- Gain adjustment for FIR correction now applied before frequency band limitation in signal processing
- Only corrects gain within the active correction band (f_min to f_max)
- Preserves magnitude outside correction range, avoiding unintended global gain changes
[1.1.12] - 2025-11-06
Added
- Independent calculation modes for magnitude and phase FIR correction
- Separate “Correction calculation” dropdowns for magnitude and phase correction
- Each can independently choose pre-IIR or post-IIR signal calculation
- Available for both per-driver and global FIR correction filters
- Pre-ringing analysis in impulse response plots
- Automatic weighted RMS calculation of pre-ringing using Hilbert envelope
- Perceptually-weighted metric using sigmoid function (masking near peak, penalty far from peak)
- Displayed in hover tooltip with level in dB and qualitative risk assessment
- Risk labels: “Likely masked” (≤-36 dB), “Low risk” (-36 to -24 dB), “Moderate risk” (-24 to -12 dB), “High risk” (>-12 dB)
- Non-intrusive: only shown when hovering over impulse curves
- UI color scheme selection
- New “UI Color Scheme” option in Settings > General > Appearance
- Choose between “Red” (custom red theme) or “Blue” (default egui theme)
- Red scheme: custom red accent colors for headers and active buttons
- Blue scheme: standard egui colors with blue accents
- Changes apply immediately without restart
Improved
- Correction filter UI reorganization
- Removed pre/post-LP and HP calculation modes as it could cause issues
- All FIR corrections are now computed without FIR LP or HP filters
[1.1.11] - 2025-11-05
Added
- X-axis synchronization for time-domain plots
- New “Sync X-axis” toggle now also synchronizes impulse and step response plots
- Double-click any synchronized plot to reset all time axes to full range
- Independent Y-axis control per plot for flexible visualization
- Auto-bounds system: plots automatically adjust to data range, disabled by user zoom/pan, re-enabled by double-click
- “All” button for driver management
- Quickly enable all drivers with a single click
- Complements existing “Solo” button for easy workflow: Solo -> test -> All -> compare
- Located next to “Solo” button in each driver panel
- Peak time information in IR Information section
- Displays temporal position of IR peak for manual window definition reference
- Maximum audio inputs and outputs increased to 256
- Enables use of professional audio interfaces with numerous channels
- Measurement notes field for each driver
- Add notes about hardware configuration, measurement setup, etc. (up to 1000 characters)
- Accessible in the IR management window under “Measurement Notes”
- Default sweep parameters in settings
- Configure default sweep duration, level, start/end frequency
- New windows automatically use these defaults
- Graph display configuration in settings
- New “Graphs” tab in Settings window
- Reorder graphs with up/down (\u{2B06}\u{2B07}) buttons to customize display order
- Configure which graphs are shown by default in new projects
Improved
- Y-axis alignment across all plots
- Fixed Y-axis width ensures vertical alignment of plot areas
- Better readability when comparing multiple graphs with different label lengths
- Clipping warnings now use a dedicated notification group
- More reliable notification system with less visual clutter
Fixed
- Audio settings preservation across all project operations
- All audio configuration (devices, sample rate, channels, calibration, measurement channels, timing reference, etc.) now persists when:
- Loading existing projects
- Creating new projects
- Resetting to new project with defaults
- AudioManager is properly reinitialized with user’s saved settings instead of reverting to defaults
- Prevents accidental overwrite of carefully configured audio settings
- All audio configuration (devices, sample rate, channels, calibration, measurement channels, timing reference, etc.) now persists when:
[1.1.10] - 2025-11-02
Added
- THD truncation margin parameter for drivers in settings
- Adaptive impulse/step response display with configurable detection
- Automatically detects signal boundaries at 1/1000th of peak amplitude
- Configurable margins before (default: 5ms) and after (default: 10ms) signal
- Can be disabled to show full impulse response at all times
- “Focus on Summed IR” button for impulse and step response displays
- When enabled, all curves use the same time boundaries as the summed IR
Fixed
- Auto-save now forces save on application shutdown
- Ensures pending changes are saved before closing
- Resolves issue where rapid edits could be lost if closing within 1.5s of last change
- Project state now consistently preserved across sessions
- Phase compensation now correctly accounts for driver IR delay compensation
- Previously only affected group delay, now phase is also compensated
- Ensures phase and group delay remain consistent when using IR delay compensation
[1.1.9] - 2025-11-01
Added
- FIR compensation delay parameter for global FIR correction filters
- Fine-tune FIR alignment when filter ringing permits
- Rotates the impulse response in time domain (±100 ms range)
Fixed
- Phase delay compensation now correctly applied to total response (Sum)
- Affects display when “Compensate plot delay” is enabled in Global FIR settings
- “Open recent projects” menu now persists correctly across sessions
- IR delay compensation now resets to zero on every new measurement or import
[1.1.8] - 2025-10-31
Improved
- Phase and group delay calculations significantly improved when working with FRD files
- More accurate phase extraction from frequency response data
- Better group delay derivation from phase information
- Improved unwrapping and numerical stability
- IIR and FIR+IIR graph tabs simplified to reduce visual clutter
- Removed aggregated sum curves that were causing confusion
- Individual driver responses remain available and accurate
- Cleaner display focusing on relevant per-driver information
Added
- “Open recent projects” menu for quick access to previously used projects
- Tracks up to 20 most recent project files
- Provides faster workflow for switching between projects
- Measurement confirmation dialog before starting sweep
- Displays safety warnings and reminders (mic position, gain levels, audible sweep)
- Can be disabled in audio settings with toggle (“Skip confirmation”)
- Helps prevent accidental measurements with improper setup
[1.1.7] - 2025-10-29
Added
- Added an input gain compensation setting in the audio preferences.
- This allows adjusting the recording level directly in software
- Useful for devices like the UMIK-1 on MacOS, where the system enforces a very low fixed gain and no hardware control is available.
- Added microphone calibration file import in audio preferences.
- Supports standard calibration file format (text files with “Sens Factor” header and frequency/error columns)
- Applies minimum-phase correction to impulse response measurements
- Correction is baked into the captured impulse response, not just applied visually to magnitude plots
[1.1.6] - 2025-10-28
Fixed
- Wrong total phase with some combination of parameters
Improved
- IIR magnitude plot auto-bounds now use -100 dB lower limit when high-pass or low-pass filters are active
- Matches FIR+IIR display behavior for better filter slope visualization
- Dynamically adapts based on active filter types (HP/LP vs. PEQ/shelving)
[1.1.5] - 2025-10-27
Added
- HFD Export for Hypex FA Series Amplifiers
- Direct export to Hypex FA amplifier configuration files (FA122, FA123, FA251, FA252, FA253, FA501, FA502, FA503)
- Support for both Input FIR and Output FIR positions
- Automatic FIR padding to required lengths (1500 taps for Output, 4500 taps for Input)
- Per-driver IIR filter export (up to 15 biquads per channel)
- Patch mode to update existing HFD configuration files
- Automatically detects FIR position from existing files
- Allows selective preset updates (Preset 1, 2, or 3)
- Comprehensive validation:
- Sample rate check (93.75 kHz required)
- FIR tap length validation per position
- Biquad count verification (max 15 per channel)
- Driver-to-group mapping interface for multi-channel systems
- Configurable Group Delay & Phase Truncation
- Optional truncation of GD and phase curves to active frequency range
- Per-filter-type margin settings (Speakers, IIR, FIR, FIR+IIR)
- Margin values configurable in octaves (0.0-5.0)
- Reduces visual clutter by hiding curves outside useful frequency range
Fixed
- Fixed FRD file import phase reconstruction
- Automatic compensation for negative group delay to prevent impulse wrapping
- Imported impulses may appear time-shifted based on the group delay characteristics of the FRD data
- Global FIR delay compensation on graphs inactive after restarting the app
[1.1.4] - 2025-10-23
Fixed
- Fixed keyboard shortcuts not working in driver IR management windows
- Undo/Redo (Cmd/Ctrl+Z, Shift+Cmd/Ctrl+Z) now work in all IR windows
- Save (Cmd/Ctrl+S) and Export (Cmd/Ctrl+E) shortcuts now available
- Settings shortcut (Cmd/Ctrl+,) now functional in IR windows
- Fixed impulse export dialog behavior
- “Include distortion” option now unchecked by default (previously checked)
- TXT export button now enabled by default (previously disabled)
- TXT export now available even when distortion metadata is not present
- Fixed impulse clipping during WAV export
- WAV export now automatically normalizes impulses with amplitude exceeding ±1.0
- Prevents clipping while preserving the impulse shape
- Particularly important for FRD-imported impulses which may have unnormalized amplitudes
- Fixed undo/redo creating multiple snapshots when dragging numeric values
- Drag operations (DragValue widgets) now create a single snapshot on release
- Works across all windows (main window and all viewport windows)
- Single Cmd+Z now correctly reverts an entire drag operation to its initial state
- Prevents undo history pollution from intermediate drag values
Improved
- Improved impulse response display layout in driver IR management window
- Long filenames are now truncated to 30 characters with ellipsis to prevent overflow
- Duration and sample rate information moved to a separate line for better readability
- Prevents UI elements from extending beyond window boundaries
- Improved IR Delay Compensation System
- IR delay compensation no longer truncates impulse responses
- Impulses are now preserved intact in memory with delay applied as display offset
- Delay compensation now affects:
- Time axis display (visual shift without data loss)
- Group delay calculations (compensated by subtracting delay)
- Prevents magnitude and phase artifacts from truncation
- Maintains full impulse information including pre-ringing
[1.1.3] - 2025-10-21
Added
- Option to disable clipping warnings in General Settings
- EQ Boost Cap parameter in AutoEQ (both driver and global IIR)
- Prevents AutoEQ from stacking multiple filters at the same frequency
- Configurable from 0 to 20 dB
- Set lower values (e.g., 10 dB) for more conservative corrections
- Helps achieve more natural-sounding frequency responses
- Gain Offset parameter in AutoEQ (both driver and global IIR)
- Adjusts the target level before EQ optimization
- Range: -20 to +20 dB (default: 0 dB)
- Useful for compensating overall system level shifts
- Applied to target curve before computing corrections
Fixed
- FIR+IIR impulse responses no longer truncated, ensuring accurate plots
- Clipping warnings now display correctly for global IIR filters
- FIR+IIR frequency response curves now render properly with active global IIR filters
- Keyboard shortcuts now work correctly in all native windows (Settings, Documentation, Filter windows, etc.)
Improved
- “Compensate FIR delay on graphs” option now preserves pre-ringing instead of truncating it, preventing magnitude and phase artifacts
- Magnitude response graph toggle changed from ‘R’ to ‘M’ key for better ergonomics
- AutoEQ parameter layout reorganized into 3 columns for better space efficiency
- All AutoEQ parameters now use consistent 6-column grid layout (3 visual parameter pairs)
- Parameter grouping: Target/Resolution/Gain Offset, Gain limits/EQ Boost Cap, Q limits/Max Filters, Frequency limits/Shelves
[1.1.2] - 2025-10-21
Added
- Added “Compensate FIR delay on graphs” toggle in Global FIR Correction window
- Optionally shifts impulse response left to remove visual delay introduced by the global FIR filter
- Does not affect exported filters, only improves plot alignment
- Useful for comparing time-aligned driver responses in the presence of global FIR correction
- Added Reset Application Settings feature in Settings
- Completely resets all application settings and preferences to factory defaults
- Clears application cache and UI state
- Accessible via Settings > General Settings > Reset section
- Useful for troubleshooting or starting fresh with default configuration
Fixed
- Fixed phase response not reflecting polarity inversion
- Phase now correctly shifts by 180° when driver polarity is inverted
- Phase correction filters now properly display 180° phase shift when their polarity is inverted
- Fixed global IIR and FIR+IIR graphs not clearing when using “Clear Filters” button
- IIR response curves now properly reset to flat when all filters are removed
- Combined FIR+IIR graphs now correctly update when IIR filters are cleared
- Fixed manually added filters in AutoEQ tab not being applied to driver response before running optimization
- AutoEQ filters are now automatically enabled when adding the first filter
- Locked filters (e.g., high-pass or low-pass) are now properly integrated into the AutoEQ target curve instead of being compensated by the optimizer
- Fixed AutoEQ tab requiring manual IIR toggle to be enabled (AutoEQ and Manual IIR tabs are now fully independent)
- Fixed IIR filter type changes not triggering UI updates
- Changing filter types (e.g., LR low-pass -> high-shelf) now properly invalidates the filter cache
- Filter response is immediately recalculated and displayed when switching types
Improved
- Reorganized documentation to enhance readability and better align with the app’s workflow
- All windows now use the native OS window system, improving multi-monitor usability
- Lockable filters now available in the manual tab
- Locked filters now stay in place when clearing the filter list
- AutoEQ now respects locked filters by incorporating their response into the optimization target
- Only high-pass and low-pass filters (Butterworth, Linkwitz-Riley, Bessel) are included in the target curve
- PEQ, shelf, and allpass locked filters are preserved but not integrated into the optimization target
- Example: Setting a high-pass or low-pass filter will preserve that behavior instead of trying to correct it
- Locked filters’ frequency response is calculated and multiplied with the target curve for optimization
[1.1.1] - 2025-10-19
Added
- Preferences for default values.
- Configurable sweep frequency range: Users can now set custom lower and upper limits for measurement sweeps.
- Default: 0.1 Hz to Nyquist (full bandwidth).
- Manual controls: start frequency adjustable from 0.1 Hz to 20 kHz; end frequency up to Nyquist.
- “Reset Range” button to quickly return to full bandwidth.
- Automatic Nyquist limiting based on current sample rate.
- Typical use cases:
- Subwoofers: 20 Hz-200 Hz
- Tweeters: 2 kHz-20 kHz
- Full-range: 20 Hz-20 kHz
- Frequency values are automatically rounded to maintain optimal phase coherence whenever possible.
Improved
- FIR delay now shown directly in graph legends for a cleaner UI.
- Maximum of 10 speakers supported for complex setups.
- Improved layout of settings.
- Labels refined for a clearer interface.
[1.1.0] - 2025-10-18
Added
- Added “Save” menu item in File menu for easier project saving
- Added adaptive display window for impulse and step responses with long filters (>10000 taps)
- Added progress toast with progress bar during IR measurements showing estimated completion time
Fixed
- Fixed window positions jumping when renaming impulse responses
- Fixed filter configuration windows (LP, HP, Correction, IIR) disappearing when changing IR names
- Fixed collapsing headers closing unexpectedly when renaming drivers
- Fixed autosave not triggering when changing IR names
- Fixed crash when n_taps exceeds FFT size in impulse correction filter generation
Improved
- Simplified impulse response management window interface
- Impulse and step response plots now automatically extend display window for very long filters based on peak position
- Enhanced toast notifications with shadow effects for better visibility
[1.0.9] - 2025-10-16
Added
-
Added lockable IIR filters in AutoEQ mode
-
Added timing reference via loopback (Electric) or pre-chirp reference (Acoustic)
-
Added phase graph with wrapped/unwrapped display
-
Added adjustable delay compensation for raw impulse response (in IR Window management)
-
IIR filter export functionality in File -> Export menu- FQG format (Frequency, Q, Gain): Simple text format for filter parameters
- CamillaDSP format: YAML configuration for direct import into CamillaDSP
- Exports global IIR filters and per-speaker IIR filters separately
- Supports all filter types: Butterworth, Linkwitz-Riley, Bessel, PEQ, Shelving, Allpass
- Only active filters are exported
- Respects Manual/Auto-EQ tab selection
[1.0.8] - 2025-10-15
[1.0.7] - 2025-10-13
Added
- Added FRD and txt impulses support
Improved
- Improved latency compensation for sweep measurements
- Improved sweep error messages with notifications
- Improved audio support for Windows