Skip to content

Releases: kidoz/foo-dsp-speaker-range

Speaker Range Crop v0.2.3

12 Jun 06:16

Choose a tag to compare

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

11 Jun 20:07

Choose a tag to compare

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

11 Jun 19:43

Choose a tag to compare

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

11 Jun 19:23

Choose a tag to compare

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-release and just release commands 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_endofplayback and 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