Skip to content

0.3.0 - 2026-10-11

Choose a tag to compare

@github-actions github-actions released this 12 Oct 02:22
3bfdba0

Release Notes

Breaking

  • All presets and the Config default have been retuned, so output differs from 0.2.0 for every preset. Each preset now scores higher on the HydrogenAudio SRC test suite and runs faster; PRESET_HIGH is much faster.

    Preset Quality Bandwidth Taper
    PRESET_FAST 512 0.92 Kaiser(30.0)
    PRESET_GOOD (default) 2304 0.975 Kaiser(30.0)
    PRESET_HIGH 7056 0.996 Kaiser(34.0), alias floor 0 dB
  • PRESET_EXTREME is removed, along with ardftsrc-rs --preset extreme. PRESET_HIGH now permits aliasing at the lower Nyquist (alias floor 0 dB) and scores higher than PRESET_EXTREME did, with a quarter of its FFT size. Use PRESET_HIGH instead.

  • PRESET_HIGH now supports f32 processing (its quality is within the f32 limit of 8192).

  • TaperType::default() is now Kaiser(30.0) (was Cosine(3.4375)).

  • The bessel feature is removed. The Kaiser taper no longer depends on pxfm and is always available.

  • TaperType::Bessel(alpha) is replaced by TaperType::Kaiser(beta), which takes the Kaiser window's beta as MATLAB and SciPy do: Bessel(alpha) corresponds to Kaiser(PI * alpha). It integrates the window exactly and samples it at bin centres, so it is exactly amplitude-complementary and centred on its transition. When the transition straddles Nyquist it samples from unity to zero inclusive, putting −6 dB on Nyquist.

  • Kaiser accepts beta in (0, 300] and otherwise fails validation with the new Error::InvalidKaiserBeta.

  • TaperType::Kbd and TaperType::HalfKaiser are removed.

  • ardftsrc-rs: --taper-type bessel is now kaiser and takes --beta (default 30) instead of --alpha. kbd and half_kaiser are removed.

  • CpuCore is no longer exported. It could not be constructed outside the crate, since its constructor takes a crate-internal configuration type. Use PlanarResampler with channels = 1 for single-channel resampling.

Fixed

  • With a lowered alias floor, the transition is now centred on the lower Nyquist, so every pair of bins mirrored about it sums to unity gain and Nyquist sits at −6 dB. Taper samples that had underflowed to zero were trimmed, which pushed the transition above Nyquist: with the default taper and the widest floor at 44.1 kHz → 96 kHz, −6 dB sat 9 bins high and Nyquist was at −3.4 dB. This affects PRESET_HIGH, which now uses an alias floor of 0 dB. Without aliasing the layout is unchanged.
  • Taper profiles are now computed in f64 for every sample type. In f32, Cosine and Planck tails underflowed earlier and shifted the transition toward Nyquist (by up to 280 bins for Cosine(3.4375) over 5000 transition bins).
  • End-of-stream stop extrapolation no longer reads its input history from a buffer the forward FFT had already used as scratch. With the default FFT backend, the synthesized tail was built from corrupted samples, degrading the final chunk; outputs now match the high-precision backends.
  • With decimate enabled, output is now exactly time-aligned with the input. The decimation cascade's group delay was rounded to whole output samples, leaving a fractional-sample offset; the remainder is now compensated in the spectral stage.

Documentation

  • Quality reports regenerated for the new presets, with an f32 report for PRESET_FAST.
  • Added guidance on compiler optimization settings for realtime resampling.

Install ardftsrc-rs 0.3.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/phayes/ardftsrc-rs/releases/download/v0.3.0/ardftsrc-rs-installer.sh | sh

Install prebuilt binaries via Homebrew

brew install phayes/tap/ardftsrc-rs

Download ardftsrc-rs 0.3.0

File Platform Checksum
ardftsrc-rs-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
ardftsrc-rs-x86_64-apple-darwin.tar.xz Intel macOS checksum
ardftsrc-rs-x86_64-pc-windows-msvc.zip x64 Windows checksum
ardftsrc-rs-aarch64-unknown-linux-gnu.tar.xz ARM64 Linux checksum
ardftsrc-rs-x86_64-unknown-linux-gnu.tar.xz x64 Linux checksum