Releases: kidoz/foo-dsp-speaker-range
Releases · kidoz/foo-dsp-speaker-range
Speaker Range Crop v0.2.3
Performance
- The two cascaded Butterworth sections of each Linkwitz-Riley side now share a single coefficient set instead of storing duplicates - smaller filter state and one coefficient block per side in the processing loop
Other
- Cutoff bounds (10-1000 Hz, 1.0-24.0 kHz) are defined once and shared by the settings clamp and the config-dialog slider ranges, so the UI and backend limits can never drift apart
- No sound changes versus v0.2.2 - the filter response is bit-identical
Full Changelog: v0.2.2...v0.2.3
Speaker Range Crop v0.2.2
Fixes
- Non-finite cutoff values (NaN/Inf) from preset data or the dialog edit boxes are now rejected and replaced with safe defaults - a crafted or corrupted DSP preset can no longer poison the filter coefficients and turn the output into full-scale noise
- The filter now recovers from non-finite input samples: a NaN from a corrupt decoder previously stuck in the IIR feedback until the next seek/stop, now playback self-heals within one chunk
Other
- Control Flow Guard (
/guard:cf) enabled for the distributed DLL, alongside the existing ASLR and DEP protections - No sound changes versus v0.2.1 - filter response, presets and LFE handling behave identically
Full Changelog: v0.2.1...v0.2.2
Speaker Range Crop v0.2.1
Performance
- LFE channel detection is resolved once per channel-layout change instead of once per sample - the audio loop now reads a cached per-channel bitmask, removing the SDK channel-flag lookup from the processing hot path
Other
- No functional or sound changes versus v0.2.0 - multichannel LFE handling, filter response and presets behave identically
Full Changelog: v0.2.0...v0.2.1
Speaker Range Crop v0.2.0
Features
- Vicanek matched (decramped) filter design replaces RBJ-cookbook biquads - the Linkwitz-Riley 4th-order response now tracks the analog prototype all the way to Nyquist
- LFE channels keep their low-frequency content - the high-pass side is bypassed on channels foobar2000 marks as LFE
- Component version is injected from the Meson project version
just build-debug,just build-releaseandjust releasecommands for one-step plugin builds
Sound
- 20 kHz low-pass stays active and accurate at 44.1 kHz, where the old bilinear design had to disable it above 0.45 x sample rate
- Exact -6.02 dB Linkwitz-Riley crossover point at the cutoff frequency
- Minimum-phase IIR processing with zero latency, double-precision state at all sample rates
Fixes
- Gapless playback no longer glitches at track transitions - filter state is kept across
on_endoftrack/on_endofplaybackand only reset on seek/stop - No allocations or exceptions can cross the foobar2000 SDK audio callback - reconfiguration failures pass audio through and retry
- Config dialog uses an invariant numeric locale, resyncs edits with sliders on focus loss, and reports preset save errors instead of crashing
Other
- Unit tests migrated to Catch2 v3 via Meson WrapDB (decramping, LFE bypass, channel isolation, preset table coverage)
- Meson wrap SDK mode is now the default build flow
- LF line endings enforced repo-wide; clang-tidy output filtered to project code
Full Changelog: https://github.com/kidoz/foo-dsp-speaker-range/commits/v0.2.0