Repository navigation
WASAPI Driver for ASIO 0.9.10
Pre-release
Pre-release
0.9.10 (changes from 0.9.9) - "soxr"
Optional higher-quality rate conversion with the SoX Resampler library,
requested by the maintainer (the default stays the low-latency sinc of
0.9.9), plus build and CI maintenance.
Summary of all changes:
- "Stop trace.bat" now always saves the trace in
C:\Users\Public\Documents\WASAPI Driver for ASIO\Traces and opens that folder in Explorer.
The 0.9.9 "signed-in user's Desktop" detection proved unreliable on a real system (standard
user + different administrator account at the UAC prompt: the file went to the
administrator's profile). Verified on Windows: the 0.9.9 trace contained 556 events of the
WASAPIDriverForASIO provider, decoded by tracerpt, with no user or computer names. - New optional engine for the internal fixed-ratio rate conversion (used
when the DAW rate differs from the device rate with "Low latency" on, e.g.
a 44.1 kHz project on a 48 kHz device, outputs and inputs), used only when
"soxr (best quality, +8-10 ms)" is selected: soxr, the SoX
Resampler library 0.1.3 (Steinberg built-in ASIO Driver 1.0.9.26 installs
soxr.dll next to asiobtin.dll, and asiobtin.dll loads it for sample-rate
conversion (its binary contains the message "Cannot load soxr.dll! No
SRC!"); observed by inspecting the installed files), recipe HQ (20-bit, linear phase, pass band to 91.3 % of
the lower Nyquist frequency, no aliasing). Measured at 44.1 -> 48 kHz:
132.6 dB SNR and -136 dB THD+N at 1 kHz (sinc 114.9 / -122.5), -137 dB
THD+N at 18 kHz (sinc -126.5), images -135 dB (sinc -120), pass-band
ripple 0.003 dB; about half the CPU of sinc. Cost: about 8-10 ms more
latency per converted direction at 44.1-192 kHz, more at 16-32 kHz
(look-ahead 429 input frames = 9.7 ms instead of 64 = 1.45 ms at
44.1 -> 48 kHz; 48 -> 16 kHz 15.6 ms, 16 -> 44.1 kHz 26.8 ms), reported
exactly to the DAW (the model measures
the round trip equal to the reported latencies within 0.5 frame). - New setting FixedRatioEngine=Auto|Soxr|Sinc|Hermite (Advanced tab,
"Rate conversion", with a help tip in the five languages; stored in
profiles; the DAW restarts the driver to apply it). Auto (default) and
Sinc: exactly the 0.9.9 behaviour (sinc within the CPU budget, lowest
latency with full anti-aliasing; Auto never picks soxr). Soxr: soxr when
the shared CPU budget allows, otherwise the 0.9.9 rule, and the log says
why soxr was not used. Hermite: Hermite for every up-conversion (lowest latency
and CPU, ~89 dB); down-conversions still use sinc (or Windows). With Auto
the log line is unchanged from 0.9.9 ("Output: rate conversion 44100 ->
48000 Hz, 2 channels: sinc (12 M MAC/s, budget 150 M)"); with soxr it says
"soxr HQ (12 M MAC/s equivalent, budget 150 M)" and the engine line
"internal rate conversion 44100->48000 Hz (soxr HQ, look-ahead 429
frames)"). - Real-time safety: soxr allocates only on the host thread (stream open,
start); the audio thread never makes it allocate (small calls, warm-up,
a FIFO allocator with headroom; tests count 0 allocations); soxr's global
FFT table is sized once per process. Opening a stream with soxr takes
about 10-20 ms for stereo and up to about 150-300 ms for 32 channels (the
warm-up; the 2 s look-ahead probe runs once per rate pair and process,
later opens use its cached result). ARCHITECTURE.txt section 60. - MSVC warning C4244 (wchar_t -> char, from ) in the Arm64X build
fixed: the ASCII copy of a device name used for channel names is now made
by chn::AsciiShadow (ASCII kept, other characters '?') instead of keeping
the low byte of each character, which could also turn some CJK or
full-width characters into '(' / ')' / tab. - Version number: getDriverVersion() returns 9100 (new scheme
major * 100000 + minor * 1000 + patch * 10; the old scheme would have
given 1000 for 0.9.10, the value of 1.0.0). The update check compares
0.9.10 > 0.9.9 numerically (tested). - CI: GitHub actions updated to releases that run on Node 24 (checkout
v7.0.1, upload-artifact v7.0.2, download-artifact v8.0.2; pinned to
commit SHAs); ilammy/msvc-dev-cmd stays at v1.13.0 (latest release, still
Node 20). Linux jobs run on ubuntu-24.04 instead of ubuntu-latest.
download-artifact now fails on a corrupted artifact (digest mismatch). - Build: the soxr C files are compiled by build.sh, build-x86.sh,
build-arm64.sh and scripts/build-arm64x.ps1 (warnings off for those
third-party files only; 0 warnings from src/). The DLLs still import only
Windows system DLLs. tests/run_all.sh builds soxr for fixedratio_test,
which now also compares soxr, sinc and Hermite and counts soxr's
allocations; update_test checks the version scheme; chnames_test the new
ASCII copy. - Documents: THIRD-PARTY-NOTICES.txt section 6 (soxr, LGPL-2.1, source in
third_party/soxr) and the LGPL 2.1 text; COPYRIGHT.txt; installer
notices; ARCHITECTURE.txt section 60; CODE-REVIEW.txt "0.9.10" and
"Independent review of 0.9.10" (8 LOW findings, all fixed);
KNOWN-ISSUES.txt KI-10; TEST-GUIDE.txt block AA; README, FAQ, BUILDING.
Not changed: the drift-correction resampler (ResamplerQuality), Exclusive
mode, extra devices, the tools (they do not contain soxr), the installer
logic.
This package contains WasapiDriverARM64X.dll (Setup and bin.zip): on Windows on Arm the Setup registers it once for native ARM64 and emulated x64 hosts. Not yet tested on real Windows on Arm hardware (KNOWN-ISSUES.txt KI-9).