This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Summary
AI summaryUpdates Windows, bit-perfect, and Gates across a mixed release.
Full changelog
[1.17.0] - 2026-07-03
The fifth flagship — the audiophile moat. NewAmp's first native code.
Added
- Bit-Perfect Exclusive (Windows). Settings → Playback grew the toggle the
audio-quality doc used to call "future phase": true WASAPI-exclusive
output through a first-party native engine (vendored miniaudio, N-API,
native/newamp-audio/). When it's on, tracks bypass Chromium, Web Audio,
and the OS mixer entirely — ffmpeg decodes straight to raw PCM in the main
process and a lock-free ring feeds the DAC on the WASAPI callback thread.- Honest by construction. The stream format is negotiated from the
device's native exclusive formats; if your DAC's clock can't run the
source rate, NewAmp resamples explicitly (SoX, precision 28) and tells
you — it never ships miniaudio's hidden converter (which we caught
silently resampling 44.1→48 k on real hardware during development, and
now refuse at open time by comparing requested vs. internal format). - The gold badge. The transport's signal-path badge earned a fourth
tone: goldEXCLUSIVEis the strict claim — lossless source, rate + bit
depth + channel layout preserved, no DSD conversion. Anything less shows
EXCLUSIVE*with the exact reason in the tooltip. 16-bit into a 24-bit
device slot is still gold (zero-padding loses nothing); mono-to-stereo,
rate conversion, or DSD→PCM honestly is not. - No DSP means no DSP. EQ, ReplayGain, crossfade, limiter, preamp and
software volume are structurally out of the path and grayed in Settings
with an explanation. Volume is your DAC's knob — same deal foobar2000
gives you, now with the reasoning printed on the tin. - Visualizers stay alive. A 30 Hz playhead-aligned PCM tap flows from
the native engine into a spec-faithful AnalyserNode emulation (Blackman
window, 1/N FFT, -86/-10 dB byte mapping), so Eviland, MilkDrop, the
detached projector, and Resonance react to exactly what the DAC is
playing — proven by the gate: analyser energy with a silent Web Audio
graph can only come from the native tap. - Gapless over exclusive. When the next track negotiates the identical
device format, its PCM is spliced into the same ring at the exact frame
boundary — no reopen, no gap. Rate changes re-open the device with a
deliberate micro-gap (foobar2000 behavior). Pause releases the device
after ~15 s so system audio comes back. - Falls back like a grown-up. Podcasts, cue-sheet segments, non-library
files, a device that vanishes mid-track, another app holding the DAC —
each falls back to the shared path per-track with the reason surfaced in
Settings, never a silent dead toggle. - Gates:
smoke:exclusive-output(addon: enum/probe/shared push, exact
frame accounting; full exclusive HW pass behind
NEWAMP_EXCLUSIVE_SMOKE_HW=1) andsmoke:exclusive-ui(boots the real
app, plays a FLAC through the native path, asserts exclusive engagement +
clock advance + tap-fed analysers; earns(bit-perfect)on rate-matched
hardware).
- Honest by construction. The stream format is negotiated from the
Fixed
- Windows taskbar icon renders again. The 1.15.0 tray fix converted every
ICO frame to BMP — including the 256 px frame that the taskbar/high-res
shell path officially expects as PNG (the CHANGELOG even said the taskbar
"looked fine" because it decoded PNG).build/icon.icois now
mixed-format (BMP < 256 for the tray, PNG @ 256 for the taskbar), rebuilt
by the new committedscripts/rebuild-icon.mjs(do NOT use fix-logo.py —
Pillow writes all-PNG and re-breaks the tray). Belt-and-braces: every
BrowserWindow now sets an explicit window icon and the app declares its
AppUserModelID (io.newamp.player) so taskbar identity/pinning resolve to
our icon instead of a stale shell cache. docs/audio-quality.mdno longer recommends audify/RtAudio for the native
path — RtAudio's WASAPI exclusive mode is an unimplemented TODO; the doc
now describes the shipped miniaudio engine and the observed hidden-resample
trap it refuses.
Verification: full release gate green (automatedOk) at this commit — 95+ smokes including the new smoke:exclusive-output and smoke:exclusive-ui end-to-end gates, real-library completion audit, packaged-app checks. Standing accepted blockers, same as every release: artifacts are unsigned (no Authenticode cert), Last.fm live proof and the human speaker/headphone pass are manual.
SHA256SUMS.txt + BUILD-PROVENANCE.json attached.
Full Changelog: https://github.com/Evilander/newamp/compare/v1.16.0...v1.17.0
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Evilander/newamp
All releases →Related context
Related tools
Earlier breaking changes
- v1.5.7 IPC argument order standardized to (albumArtist, album) across all call sites
- v1.5.7 Breaking: IPC argument order aligned to (albumArtist, album) everywhere
- v1.5.7 Breaking: setAlbumRatingScore and getAlbumRating throw on missing input
- v1.5.6 Milkdrop broken on 1.5.4 and 1.5.5 builds; upgrade recommended.
- v1.5.5 Upgrade strongly recommended; version 1.5.4 cannot display albums.
Beta — feedback welcome: [email protected]