Version 6.75.0
Release date: 2026-09-25
DpdoPlayer
Improvements
- Multichannel DSD can be spread across several devices, channel by channel: one DSD stream is split by channel -- left and right to a device each, or six channels across three; how many devices you get follows the mode you pick. The DoP packing layout now lives in a single implementation, held in place by byte-exact contract tests.
- The rules for direct (native) DSD output are now written out: what 1-bit can do -- channel reordering, channel duplication -- is still allowed on the direct path; what 1-bit cannot do -- summing, gain changes, muting a whole channel -- is now refused with a stated reason instead of being silently degraded; a rig that needs summing switches to PDM2PCM decoding automatically, and the log says why.
- When a device cannot take the DoP carrier rate, the carrier steps down by measurement: the carrier is lowered to the rate the device actually accepts, measured rather than guessed (engine-side DSD rate conversion).
- Multichannel material folded onto fewer channels is normalized statically over the whole track: the peak of the entire source is scanned before playback starts, then one fixed attenuation is applied to the whole track (no AGC, no limiter), so the folded result no longer clips.
- New command-line switch
-rig-info: exports the resolved preset as JSON (the same schema-rigloads), which is how the GUI puts a preset into the editor. - New macOS edition: a native CoreAudio output backend — DoP carrier output, exclusive (hog) mode with read-back verification, and native-DSD capability probed from the device rather than hardcoded; the command-line player entry point and the DMG packaging script come with it.
- New iOS client: the engine now runs in-process inside the app (no subprocess), and output uses DoP per audio session; entitlements are unlocked through App Store in-app purchase (IAP); the privacy manifest and the submission-contract checks required for review are included.
Fixed
- Playback would not go on to the next track after one finished: changing tracks inside an ALSA session wrote data into the SETUP state, so nothing followed the track that had just ended.
- The device was busy when the format or the sample rate changed: the device is now released before the hardware parameters are set again, and the formats it has accepted are remembered.
- Multichannel material on a device with fewer channels stopped after folding: the folded format was mistaken for "the format changed"; playback now continues in the folded format.
- Cover lookup completed: ID3 blocks embedded in
.wavand.aiffcontainers, ID3v2.3 tags and cover types written by other tools are now read, as are.wv/.apefiles that carry only ID3v2 and no APEv2.
No functional changes to the engine or the packager in this release.
Version 6.74.23
Release date: 2026-09-24
DpdoPlayer
Improvements
- The now-playing panel shows the album cover: it is looked up embedded first (SACD ISO
/COVER.JPG; DSF/DFF ID3; FLAC PICTURE block), then as an image in the same folder as the audio file (cover.jpg,folder.jpg, or a file with the same name); the tooltip says where the image came from. - New audio-data field in the panel: sample rate / bit depth / channels / DSD / DST / duration of the source itself, not the format sent to the device.
- Two channel level bars (left/right) in the panel: they show the peak of the block that is actually written to the device; at 0 dBFS they turn red and stay marked for 1.5 s, so clipping is visible at a glance (they drop to the bottom while paused).
- New previous / next track buttons: while playing they switch inside the same session (the device is not closed and reopened); at the first or last track they grey out and say so; when nothing is playing they only move the selection.
−/+buttons beside the volume slider (±5 per press, repeating while held), sent through the same path as the slider.
Fixed
- Consistent UI icons: pause / previous / next now use the same symbol family as play and stop — the media-control characters used before were drawn by the system as coloured emoji and were missing entirely in some fonts.
Version 6.74.22
Release date: 2026-09-23
DpdoPlayer
Improvements
- The playing track is now followed in the list: with a SACD ISO / CUE image playing as one long session, the highlight and bold mark follow the current track (previously always stuck on the first row).
- "Check for updates…" moved next to the license entry in the status bar: all three GUIs now match, and the old Help menu is gone (an entry too deeply hidden is no entry).
- The device list now shows every endpoint, including disabled and unplugged ones: each line carries its real format and the "HQ" endpoint family is called out, so it is easy to pick the one that can be bit-perfect.
-start/-endare now relative to the track when-trackis given:-track 2 -start 0 -end 5means seconds 0–5 of that track; out-of-range requests are now refused instead of returning a truncated slice.- Switching tracks within a session no longer closes and reopens the audio device (track changes inside one disc are noticeably faster and DSD output is not interrupted): when the output format is unchanged, the already-open device is reused instead of closed and reopened.
- Pause now really works on DSD (DoP) output: while paused the player keeps feeding marker-bearing silence, and playback resumes from the same position — it neither drops out of the DSD domain nor skips ahead.
Fixed
- A hiss on the very first playback that disappears on the second click: the engine started playing before it had the final output configuration, so the first track used the previous mode; the configuration is now always in place before the first play.
- kX-class cards: ASIO not detected: that driver hangs in its own initialisation, so probing now runs in a separate process with a 4-second limit — a hang only affects that section and the log says exactly which step it stopped at.
- Device cannot be opened after a track change (
0x800401f0): COM is now initialised per thread, at every call site. - Occasional "device in use" after switching device or scheme: the wait for the previous session to exit went from 3 to a bounded 10 seconds, and the exclusive retry budget was widened to about 12 seconds.
- Multichannel folded down to stereo is now flagged prominently in the UI (including the folding rule and where LFE went), instead of being written only to the log.
- Naming an output device but hearing another one: with an explicit device the ASIO path no longer takes over, and the log states the actual output.
- No more forcing DoP on a device without a DSD path (which would only be ultrasound or silence): it decodes to PCM instead and says why.
- An update that fails or is cancelled no longer restarts the app (it used to loop through "restart → prompt again → cancel").
- No more bare
%sin the update prompt. - The SACD ISO sector-layout fallback warning is printed once (previously it flooded thousands of lines, one per sector).
- Fixed the pops during playback: after naming an output device, a DAC that can do DSD (a DoP=yes USB DAC) was downgraded from native ASIO to DoP. It is now only rerouted when the named endpoint itself has no DSD path; a DSD-capable device keeps its own native path.
- The DoP exclusive buffer now prefers large values (starting at 2 s and stepping down; measured 80 ms -> 500 ms). A too-small buffer underruns periodically, which is exactly what you hear as pops.
- Auto now uses DoP by default on ComTrue/Fosi-class USB DACs: native ASIO output produced no sound on these devices at all (the DoP route previously required an environment variable, so the default setting stayed silent).
- Audio devices are no longer re-enumerated or probed at start-up and during playback (one root cause of the pop at start and of the occasional pop during playback).
- Before touching the device volume or switching tracks, the output buffer is pre-filled with marker-bearing silence: the instant the DAC drops out of the DSD domain lands on silence, reducing pops (on some DACs a single soft pop may still be audible when the volume is changed during playback).
- An explicit choice of native / ASIO output is no longer silently switched back to DoP: the selected output path is honoured (auto still lets the player pick the best path), and the log states the known consequences of that path on this machine.
- Fixed the light popping every ~0.9 s when playing some older self-made SACD ISOs: a small number of sectors in those images declare a packet length 3 bytes shorter than the audio actually present (a stray tail at the end of the sector). The reader used to treat the whole sector as non-audio and drop it; it now takes exactly the declared bytes, so no music is lost (commercial SACD images parse exactly as before).
- Fixed playback stopping after a track switch instead of advancing to the next track: when the previous track's leftovers were discarded on an in-session switch, the output stream was stopped but never restarted, so writes stalled and the whole playback was aborted (an abort is not reported as "finished" by design, which is why the next track never started). The stream is now restarted immediately after flushing; differential (multi-device normal/inverted) output is fixed too (it failed to forward the "re-prepare" step to its sub-devices).
Version 6.74.21
Release date: 2026-09-23
DpdoPlayer
Improvements
- Exclusive session model: playback holds the device exclusively from the moment you start; changing tracks keeps the same device (in-place reconfigure at the same rate, while rate changes and DSD↔PCM follow the driver's constraints); the device is reopened only when you pick another device or change the channel rig, and closing the program always releases exclusivity.
- CUE / SACD ISO now play inside one session: the whole disc opens the device once, and changing tracks no longer reopens it (previously every track started a new process and re-took the device exclusively).
- All player panel settings are remembered: mode, channel layout, channel rig, bit depth, DoP mode, the PDM2PCM switch and gain, crossover and volume are restored on the next launch.
- All three GUIs now check for updates themselves: a silent check runs once at startup (you are only told when a newer version really exists), and "Help → Check for updates…" does it on demand; the download is verified against SHA-256, and the update replaces the files in place whenever the install directory is writable, falling back to the installer otherwise (silent install on Windows, the system package manager on Linux), then restarts the program automatically.
- Licence problems are now directly diagnosable: when the licence check fails the log lists every hardware factor on the machine (values hashed, no raw serial numbers) together with the anti-rollback state key, and the command line gained
-auth-diag; run it twice and diff to see which factor changes.
Fixed
- Changing tracks no longer tears down the exclusive session: previously every track change stopped the player first (releasing the device) and started over, so the exclusive session never actually applied; track changes now happen inside the session and the device is no longer opened and closed repeatedly.
- Double-click switches tracks, a single click only selects: a double click used to fire two playback commands.
DSD direct output no longer aborts when it fails or the device rejects that bit depth: the player falls back to PDM2PCM decoding in the same process (dropping to 16 bit automatically when the device refuses), and neither the queued tracks nor the session are lost. The DSD fallback decision no longer carries over to the next track: when the device has no DSD path the player switches to PDM2PCM decoding in place, but that decision used to stay for the rest of the session, so switching to a PCM track (FLAC, say) tried to decode it as DSD and failed. Each track now re-derives the decode mode from the session settings.
Progress and total duration display fixed: for the last track ("play to end of file") the duration was taken from an internal sentinel and showed 31 years with the bar jumping to 98%; both are now computed from the real end of file.
- 24-bit PCM no longer fails on devices that accept only S16_LE/S32_LE: when the device rejects the 24-bit container the player reopens with a 32-bit container - the same samples shifted 8 bits and full-scale aligned, i.e. fully lossless (not a reduction in bit depth).
- Start resumes from the last track you played: previously it always restarted from the first track; it only falls back to the first track when that entry is no longer in the list (list replaced or track removed).
- Fixed "the certificate is valid but playback is refused": the anti-rollback state file used to be keyed by the set of hardware factors currently available, so after a firmware or system update changed that set an old state file was judged "modified" and the licence was refused with
No valid '.DpdoPlayer.crt' found(the certificate itself was perfectly valid). The key no longer depends on that changing set, and a state file is only treated as tampered when every copy fails to verify.
Version 6.74.20
Release date: 2026-09-21
DpdoPlayer
Improvements
- Channel rigs unified (device↔channel mapping + mix matrix + mix gain): the GUI can pick a preset, edit the 8×8 mix coefficients and load/save a
*.jsonrig; the CLI-rigtakes a preset name or the same rig file -- one rig drives both. An invalid rig (unknown channel name, out-of-range gain, mapping length not matching the device) refuses to play instead of silently using a wrong matrix. - New measured scan (
-scan): runs the whole source through the current rig and reports the measured peak per channel, whether it clips, and the mix gain that lands exactly at 0 dBFS. Peaks are read-only -- sample data is untouched. - DSD direct output now supports per-channel routing: which DAC gets which channel also works for native/DoP; a rig that needs mixing or gain switches to PDM2PCM decode automatically, and the log plus the player help say why (playback comes first).
- More device channels than source channels are now filled symmetrically: stereo source → 4 channels = L,R,L,R; → 5.1 leaves centre and LFE silent (phantom centre) instead of copying the last track.
PDM2PCM output gain now defaults to +6 dB (equal loudness with PCM);
-pdm2pcm-gain 0disables it.Playback buffer 200 ms -> 2000 ms (same on Windows exclusive and Linux): a bigger buffer absorbs the tens of milliseconds lost when the feeding thread gets preempted; the open stream logs the buffer the driver actually granted.
- Remembers the track you last played: opening the playlist selects it and scrolls it into view (if that track is gone it says so instead of jumping to another one).
- The pre-playback scan now reports progress: DSD / multichannel sources are scanned for their peak before playback starts; the scan prints a percentage and the elapsed seconds once a second, with a progress bar in the GUI -- no more "it looks stuck".
- Replaying the same file (or coming back to a track) no longer rescans: the result is cached per file (keyed by path, size, mtime and the current channel rig), so the second playback starts almost instantly. The cache never changes the output -- not a single byte.
- pairs multi-device mode: each device takes one pair of source channels, unchanged (no inversion) -- a 4-channel source to 2 DACs, 8 channels to 4, without splitting it into several commands.
- IEC 61937 passthrough (
-passthrough): hands the DTS bitstream to the receiver/decoder as IEC 61937 bursts instead of decoding it. Volume, matrix and normalization take no part on this path (changing one bit corrupts the stream), and the playback log says so. A receiver that accepts it is required. - Unified multi-device mode names: differential / BTL / crossover / pairs are all selected with
-mode, and the log prints which source channels each device actually receives. - Lossless formats (APE / WavPack / TTA / ALAC) now stream frame by frame: long albums are no longer decoded fully into memory (measured: a 300-second file drops from ~220–320 MB to ~15 MB), and playback no longer waits for preloading.
- PDM2PCM decoding (DSD -> PCM) now runs multi-core: multichannel material is about twice as fast, with byte-identical output (serial and parallel results are identical).
- New “restore device volume after playback” option (
-restore-vol, orrestore_vol=1inplayer.conf): after we set the device volume it is put back to its pre-playback value when playback ends. Off by default.Fixed
- Multi-channel downmix no longer drops centre/surround silently: when the device cannot take all channels they are folded by role per BS.775 (LFE excluded), and any clipping is counted and reported in the log.
- Bluetooth headphones and other system-mixer outputs now play on Linux: Bluetooth audio sits behind the system mixer, and the player only listed sound cards -- the headset never showed up, so it could not be selected (and therefore not played). The list now includes the system output and every output endpoint. A suspended output is resumed before playback starts (throughput used to be about 1/13 of real time, which looked like a hang), and
-volnow sets that output's own volume instead of touching another card. - Mastering presets now ship with the installers: the Windows installer, the Linux deb/tgz and the portable folder all carry the 6 presets (they were missing from the packages before).
- DSD with multiple devices (differential/BTL) no longer stalls mid-playback: each DAC's DSD capability is checked before playback starts, and if any of them cannot take DSD the whole rig switches to PDM2PCM decoding with a log line naming that device (previously it opened as DSD and aborted after a write timeout).
- When a device exposes several playback-volume controls, all of them are now set to the target: previously only one was set and another stayed at the device's own low value (measured: the second control on a Fosi DS1 sat 20 dB lower) ⇒ Linux sounded noticeably quieter than Windows. With the restore option on, every control returns to its exact pre-playback value.
- Two byte-exactness fixes: multichannel (>2 ch) output no longer carries a ±1 LSB scaling error (now byte-identical to the source); a short track with a time limit no longer reports a false failure — the exit code reflects the real result.
This release includes engine-side performance work (streaming lossless playback, multi-core PDM2PCM decoding); the packer (DpdoPackSACD) has no functional changes.
Version 6.74.19
Release date: 2026-09-21
DpdoPlayer
New Features
DTS / DTS-WAV playback: the player now opens
.dtsfiles and DTS-in-WAV containers directly (DTS core 2.0–5.1, 44.1 / 48 kHz). On stereo endpoints the source is downmixed by channel role (centre and surrounds folded at −3 dB, LFE excluded); multichannel endpoints get one channel per device. Progress, gapless track changes and multi-device differential playback reuse the same path as DSD / PCM.The "supported formats" line in the playback help and in the file dialog now matches what the player actually opens: SACD ISO, CUE and AIFF added, MP3 / AAC / OGG removed (never supported). Dragging in a folder now reports how many audio files have no decoder instead of skipping them silently.
No functional changes to the engine or the packager in this release.
Version 6.74.18
Release date: 2026-09-20
DpdoEngine / DpdoPackSACD / DpdoPlayer
Improvements
- The engine's command-line output and logs are now entirely in English (help, errors and reports follow one convention); Chinese console output on Windows is no longer garbled; the four graphical tools (player / packer / audio tools / licence registration) are bilingual and follow the UI language, or an explicit DPDO_LANG=zh|en.
- Naming unified: what used to be called DSD->PCM is now consistently PDM2PCM (matching the PCM2PDM project name); the option is -pdm2pcm-gain and the environment variable is DPDO_PDM2PCM_GAIN (the old names are no longer accepted).
- Reading SACD ISO images: when a disc genuinely has no per-track titles, track names are filled in as "album - artist - track number" instead of falling back to the file name.
Fixed
- DpdoEngine --log with any of its four values (fir / ns / freq / all) used to crash or hang and produced an empty output file - fixed.
- The Windows installer now offers component selection (player / packer / command-line tools, all selected by default).
Licensing
Improvements
- Licensing system hardening.
Changelog
Version 6.74.16
Release date: 2026-09-15
DpdoPlayer
Fixed
- feeding DoP to an onboard endpoint only produced hiss — DoP capability is now decided by device-side evidence: being able to open 176400 does not mean the endpoint can decode DoP (onboard codecs have no DSD path in hardware at all). On endpoints judged incapable,
-dop forceis refused and playback automatically switches to DSD→PCM; a debug switch still allows a true override - the hiss/pop on teardown: WASAPI drain now waits for a bounded, abortable condition instead of spinning or guessing a delay (previously buffered data was dropped outright, which produced the pop); the ASIO drain and the write ring no longer spin either
- "opens fine but accepts no data": exclusive PCM no longer waits on a device event; if the first exclusive stream after an idle period is accepted but never consumes anything, the player drops it, reopens a fresh one and keeps playing (the check looks at buffer occupancy, not at the audio clock)
- stop did nothing until the GUI was closed: the automatic fallback restarts playback in a child process, while the stop command goes to the parent's stdin and was swallowed by the parent — the child now gets its own command pipe and the parent only forwards; if stop was already pressed, no restart happens. Measured on the same material: teardown 82 s → 0.15 s
Improvements
- GUI: the device dropdown shows capability suffixes (⟨DoP 2x⟩/⟨DoP 1x⟩/⟨DoP unconfirmed⟩/⟨PCM only⟩) plus a one-line "what will actually happen" hint; a "mark as DSD decoder" entry lets you flag a device whose capability is unconfirmed. Linux now uses the same verdict and the same
-dsd-capslisting as Windows
Version 6.74.15
Release date: 2026-09-14
DpdoPlayer
Fixed
- no more spinning forever in the ALSA drain after playback (the process used to never exit); a stalled device no longer retries silently forever (it stops that playback and reports); DSD bit order is decided by content, not by whether the extension is
.iso
DpdoEngine
Fixed
- SACD ISO track/disc titles are no longer always empty; DST frame problems are reported once with a closing summary (no silent frame drops or per-frame spam); large files use 64-bit offsets (seek is no longer abandoned past 2 GB); one physical-memory check before allocating buffers; the engine GUI now shows why something failed and probes asynchronously on the About page
Version 6.74.14
Release date: 2026-09-14
DpdoEngine
Fixed
- three reader fixes (out-of-bounds WSD read / SACD 48 kHz base and multichannel / DSF data length); the real root cause of unopenable Chinese/Japanese/Korean input names on Windows (the media-info probe used a narrow fopen)
Improvements
- Windows cross-build now ships libFLAC / libmysofa / OpenCL (FLAC writing, HRIR and GPU acceleration behave the same on both platforms); unified value guards for numeric options (no longer swallowing the output filename); engine GUI preview crashes and subprocess teardown
Version 6.74.13
Release date: 2026-09-13
DpdoEngine
Fixed
--surroundhad no effect at all; an optional positional argument swallowed the output filename;--hrtf-loadfailures were silent
Improvements
- dedicated pages for spatial audio, surround and tone (HRTF · surround · tone · DSRE)
Version 6.74.12
Release date: 2026-09-13
DpdoEngine
Improvements
- four-way modulator selector plus an independent
--polyswitch; new--reverse(DSD→PCM) mode; DST and DXD outputs are mutually exclusive (combining them fails) - batch processing: output directory + naming template + output format; metadata form; per-track parameters; report/analysis flags;
--stopgain-alpha(stop-band attenuation); new About/Diagnostics page
Version 6.74.11
Release date: 2026-09-13
DpdoPlayer
Fixed
- closing or force-killing the GUI makes the player really leave the DAC's DSD exclusive mode (no process left holding the device)
Version 6.74.10
Release date: 2026-09-12
DpdoPlayer
Fixed
- window/application name aligned with the engine GUI — correct name in the taskbar
Improvements
- volume slider follows the system (endpoint) volume instead of always starting at 100
Version 6.74.9
Release date: 2026-09-12
DpdoPlayer
Fixed
-dop autoreturns to native output by default; DoP becomes explicit opt-in- root-cause fix for the ASIO callback crash (dereferencing a not-yet-ready self) + native DSD really releases the exclusive stream when finished; track changes send stop first so teardown completes (no more force-kill)
Version 6.74.8
Release date: 2026-09-12
DpdoPlayer
Fixed
- Windows: root-cause fix for input paths containing Chinese/Japanese/Korean characters; DoP exclusive now prefers the 24-bit packed container (32-bit containers stay silent on some DACs); exclusive PCM prefers same-rate exclusive and falls back to shared only with a warning
Improvements
-volunified as device-side hardware volume (host-side software attenuation removed) — identical on Linux and WindowsVersion 6.74.7
Release date: 2026-09-12
DpdoPlayer
Fixed
-volhad no effect on Windows — both output backends only stored the value instead of applying it; it now sets the device (DAC) volume, and the host never applies software gain to the DSD bitstream (lossless); without-volthe device volume is left untouched
Improvements
- One read-only diagnostic line at startup (the endpoint's current volume) so you can check that
-volreally took effect
Version 6.74.6
Release date: 2026-09-12
DpdoPackSACD
Fixed
- ISO 9660 volume identifier now follows the reference discs (
DISC1) — it used to readSACD ISO; the UDF volume label still follows--album
Version 6.74.5
Release date: 2026-09-12
General
Improvements
- The installer version now comes from the code version as the single source of truth — it used to be hard-coded in the packaging script, so a repacked installer carried a stale version number
Version 6.74.4
Release date: 2026-09-12
DpdoPlayer
Fixed
- Start position for DSD playback (
-start/-end) could only be reached by discarding frames on DFF / WSD — the landing point was off by about 0.7 ms (30 samples); DSF, DFF and WSD now all seek directly, accurate to the sample - The first 31 frames were missing after every start or jump — the DSD-to-PCM conversion emitted samples before the filter transient had filled, leaving a gap of about 0.7 ms at the beginning; skipped frames now follow the filter's actual fill level
- Explicit
-dopvalues were ignored (Windows) —-dop native/-dop asio/-dop autowere swallowed by the bare-dopbranch ahead of them and silently downgraded to DoP/WASAPI; explicit values now take effect
Improvements
- ASIO 2.3 driver capability queries (Windows) — the player asks the driver whether it can output DSD natively, how many samples its internal buffer holds and whether it reports dropouts, and prints a diagnostic line only when ASIO is really in use; per the ASIO SDK the host does not touch thread priorities (that is the driver's job)
DpdoPackSACD
Fixed
- Non-compliant UDF volume identifiers hid the disc name from third-party tools — with a non-ASCII album name the descriptor recorded the string length in characters (the standard requires bytes) and the primary volume descriptor was numbered 1 (the standard requires 0); both now match real discs, so udftools / 7-Zip read the name correctly
General
Improvements
- Regression suite grown to 30 checks — including "start position for DSD playback (DSF/DFF/WSD/48k)" and "UDF volume identifier compliance", the latter judged by an independent implementation (udftools) rather than by our own code
- Zero compiler warnings on both Linux and Windows — the player targets are covered by the warning gate too
Version 6.74.3
Release date: 2026-09-12
DpdoPackSACD
Fixed
- SACD ISOs could only be read by this program — the audio sector header is now written with the Scarlet Book bit fields (3-byte frame info, audio blocks fixed at 2016 bytes, padding packets added), so third-party tools parse it the same way they parse real discs
DpdoPlayer
Fixed
- Full-scale noise, or no sound at all, when playing real SACD discs — non-audio packets inside each sector were spliced into the stream as audio, and the DSD-to-PCM path inverted the bit order a second time; sectors are now validated on the fly with the 2048-byte identity and only audio packets are taken
- Noise layered over the music on DST-compressed SACD discs — the bit order was inverted twice; fixed
-start/-endwere silently ignored for plain DSF — with no fallback when the seek failed the options had no effect; they work now- Silent fallback when a device was busy — the player now reports why the device is unavailable instead of switching quietly
-start/-endcould not address a track inside a CUE / SACD ISO — start offsets now work with range sequences (track N), and Windows matches Linux- Repeated mode switching with several devices in differential / crossover mode — a DSD pre-check now runs before playback so devices are not switched back and forth, and crossover stays in the PCM domain
General
Improvements
- Option contract aligned (9 → 27 checks) — unknown options are no longer all blamed on "Windows only", and any shape difference between the two platforms fails the regression at once
Version 6.74.2
Release date: 2026-09-12
DpdoPlayer
Fixed
- Total duration kept jumping — on Windows the total shown beside the progress bar was recomputed on every refresh (elapsed x 100 / percent); dividing two values from different sources made the number jump. The total now comes from the engine per track (it changes only when the track changes), and the elapsed time matches Linux (duration x progress).
Improved
- Regression suite grown to 27 checks — added "progress protocol + cross-platform option contract" and "GUI headless smoke": option drift between platforms, a GUI that fails to start, or lost translations now fail immediately.
Version 6.74.1
Release date: 2026-09-12
DpdoPlayer
New
- License validation — checks
.DpdoPlayer.crtat startup (bound to the machine HWID); without a valid license playback is refused and the machine HWID is printed; once a license is revoked it is remembered locally, so even offline runs are refused - License status bar in the GUI — one glance shows "licensed / not licensed / revoked / certificate for another machine"; when not licensed it shows the machine HWID with one-click copy
DpdoPackSACD
Fixed
- CUE sheets failing to open on Windows ("no usable tracks") — Chinese file names and UNC network paths are now opened with wide-character APIs; CRLF line endings no longer leak into file names
- Outdated build script —
build.shnow forwards to the root CMake instead of carrying its own, inevitably outdated, source list
Licensing
- Issuing tools support the player product — the player certificate ToolID was added so
.DpdoPlayer.crtcan be issued
General
Fixed
- Windows differential / BTL / digital crossover silently failing — output is no longer taken over by ASIO
- Command-line semantics aligned across platforms — 7 differences corrected (including the Linux DSD criterion)
- Backend pointer concurrent use-after-free, control-thread out-of-bounds — first step of the threading model fixes
- Crash on second playback, GUI forgetting the DAC selection — fixed
- SACD ISO range progress and duration — reader sample-count semantics corrected
- DST block contract, short-block overrun, false end-of-file — fixed
Version 6.74
Release date: 2026-09-12
- Version-stamp release (content merged into 6.74.1)
Version 6.73.1
Release date: 2026-09-09
DpdoPlayer
New
- Windows version now produces sound — real WASAPI backend built with MinGW plus the libPlayer playback front end
Fixed
- Non-ANSI paths (Korean/Japanese/DBCS) — wide-character command line, wide-character file opening, UTF-8 logging
- Output format conversion — no longer mismatched when the WASAPI shared-mode mix format differs from the file format
- Playback throttling — when decoding runs far faster than real time, data is written at the device consumption rate
- Main-thread race — playback no longer polls before the playback thread is up and misjudges completion
Desktop applications
- Both Qt GUIs (DpdoAudioTools, DpdoPackSACD GUI) are now included in the Windows installer
- The old GTK3 interface is retired and fully replaced by Qt; the engine GUI product line is named DpdoAudioTools
Version 6.73
Release date: 2026-09-09
New
- DpdoAudioTools (Qt6 conversion GUI) — EQ band editing with response curve, mastering presets and preset manager, waveform/spectrum preview, recording page (CD/DSD recording)
- DpdoPlayer GUI (Qt6 player interface) — playlist, multi-device and mode selection, progress and volume, log
Fixed
- Qt GUI build chain now links libstdc++/libgcc dynamically; EQ curve not showing fixed
Version 6.72.1
Release date: 2026-09-07
DpdoPackSACD GUI
New
- Graphical interface for the packer (Linux + Windows cross-build) — artifacts go straight to release/linux and release/windows
- Chinese/English following the system language — translations embedded in the executable
Fixed
- Interface audit fixes (overlapping layout, content hidden when the window is compressed)
Version 6.72
Release date: 2026-09-07
- Engineering clean-up release: all compiler warnings removed, redundant code and directory renames, website changelog and site-wide version numbers synchronised; no user-visible new features
Version 6.71
Release date: 2026-09-02
- Stability wrap-up release: device-occupancy race fixed; all other features were published with the 6.70.0 entry
Version 6.70.0
Released: 2026-09-01
DpdoEngine
Fixes
- DSF/DFF writer tail padding — for DSD16/32 output, residual tail blocks (0x69 silence) are now auto-padded and the header block-aligned, eliminating truncation and end-of-file artifacts
DpdoPlayer
New Features
- Korg WSD playback — play
.wsdfiles produced by DpdoEngine 6.68.1+ (detects the1bitmagic, parses the General/DataSpec areas, full-chain WSD native output) - DSD → PCM real-time decode playback (
-pcm [rate]) — play DSD on DACs without native DSD support: Pdm2Pcm decodes in real time to PCM; rate 0 = auto (DSD/64 or DSD/32); combined with-pcm-bits 16|24|32(default 24-bit + noise shaping) for markedly better listening quality - WSD read support (engine side) — DSDReader/Pdm2Pcm now decode DSF / DFF / WSD
Fixes
- 12 audit fixes —
-devmissing argument no longer reads out of argv bounds; DoP DSD128+ playback logic corrected (DSD64→Solution1, DSD128/256→Solution2); files >256MB automatically switch to streaming (OOM protection); Mixer cross-thread race locked; DSF/DFF header bounds checks; removed broadpkill -f alsamatching; BTL mode now warns and falls back to STANDARD; CoreAudio busy-wait 5s timeout, etc. - DoP DSD128 channel interleave/bit-order fix — Solution2 output now uses ALSA interleaved order (was channel-blocked, L/R swapped); Solution2 respects
is_MSB(DFF no longer bit-reversed wrongly); DSD64 detection now usesdsd_sampling_frequency_base(fixes 48k-family 3072000Hz misdetection) - All silent catch(...) removed — all 11
catch(...)now printe.what(); errors are no longer swallowed - Backend consistency — AlsaBackend 24-bit unified to S24_3LE, matching PlayerEngine output; WASAPI fallback rate-down now logs a warning
Tools
New Features
- thdn deep-spectrum verification mode (
--deep) — coherent FFT length + twofold LSQ tone removal + Welch averaging + noise-floor statistics; double-double precision arithmetic, Bluestein arbitrary-length FFT, 7-term Blackman-Harris window; cross-validated against referencefft_app.py(DSD64 2k–15k median −194.2 dB)
Version 6.69.0
Released: 2026-08-31
DpdoEngine
New Features
- SOS-EF high-order noise shaper (
--sos-ef) — SOS cascade + exact-error-feedback topology that breaks the NS13/NS15 coefficient-explosion bottleneck; 15th-order in-band noise ≈ −143 dBFS (DSD64), with automatic design for any odd order (3–31) and Lee-criterion stabilization - WSD format output — direct output of Korg WSD (
.wsd): fixed header + text area + channel-interleaved DSD (MSB-first), compatible with AudioGate / ffmpeg / Audacity
Fixes
- wav/flac bit-depth normalization — amplification bug where 16-bit material was scaled ×2 and 24-bit material ×256 (incorrect s32 conversion divisor), affecting conversion quality for all 16/24-bit inputs
- CIFB stability audit — fixed the fallback 0.79 hazard, added build-time diagnostics
Version 6.68.1
Released: 2026-08-26
DpdoEngine
New Features
- WSD format output — direct output of Korg WSD (
.wsd): fixed header + text area + channel-interleaved DSD (MSB-first), compatible with AudioGate / ffmpeg / Audacity - SOS-EF high-order noise shaper (
--sos-ef) — SOS cascade + exact-error-feedback topology that breaks the NS13/NS15 coefficient-explosion bottleneck; 15th-order in-band noise ≈ -143 dBFS (DSD64), with automatic design for any odd order (3–31) and Lee-criterion stabilization
Fixes
- wav/flac bit-depth normalization — amplification bug where 16-bit material was scaled ×2 and 24-bit material ×256 (incorrect s32 conversion divisor), affecting conversion quality for all 16/24-bit inputs
Version 6.68.0
Released: 2026-08-07
DpdoEngine
Changes
- Dpdo DSP — built-in DSP modules unified under the Dpdo DSP name; site content synced across all 10 languages
- Core static-linking fix — GetLogicalProcessorInformationEx now statically linked, removing the dynamic-load cast warning
Website
- Multilingual site (9 language subdomains) and SEO/GEO enhancements
Version 6.67.0
Released: 2026-08-04
DpdoEngine
New Features
- Streaming recording (record & convert) — real-time streaming conversion while recording; no second conversion pass needed
- Full 64-bit double precision — DSP pipeline upgraded to double precision throughout (industrial/audiophile/competition grade)
Improvements
- Deep code audit — three audit rounds fixed (ring-buffer overflow detection, OOM defense, etc.)
- Competition-grade quality gates — -Wall -Wextra builds with zero warnings
- Performance optimizations — FIR/noise shaping share a thread pool (no thread-creation storms), 32B-aligned transposed coefficients, serialized peak detection, SoftLimiter fast path
- DpdoAudioTools parameter alignment — fully aligned with DpdoEngine
Version 6.66.6
Released: 2026-08-04
DpdoEngine
Changes
- CLI11 argument parsing migration — all parameters now passed separately as
--param value; fixed 3 pre-existing argument-swallowing bugs (incl. --eq / --eq-precut) - Effect-chain unit tests — added to the build line
- GUI dangling-pointer fix — create_main_window shortcut buttons packed before vbox creation
Version 6.66.0
Released: 2024-12-30
DpdoEngine
New Features
- 11th-order IIR noise shaping — 11th order added on top of the existing 3/5/7/9, delivering industry-leading in-band noise shaping
- HRTF spatial audio — new 3D spatial audio rendering module based on head-related transfer functions, enhancing headphone soundstage
- DXD output mode — direct output in DXD (Digital eXtreme Definition, 352.8 kHz/24-bit), compatible with professional audio workstations
- Psychoacoustic noise shaping — new perceptual noise shaping (
-psy) using auditory masking to optimize noise distribution - Adaptive parameters — new adaptive adjustment (
-adaptive) that optimizes processing parameters dynamically - OpenCL GPU acceleration — GPU acceleration framework significantly reduces processing time for high-order oversampling and long FIR filtering
- Look-ahead limiter (LAL) — new
-laltransient peak protection - Anti-popping overflow filter (APO) — clipping protection
- Stereo expander — stereo width expansion module
- Mastering presets — classical, pop and jazz presets
- Dpdo DSP modules — bass, treble, parametric EQ, crossfeed
- 8 dither types — rectangle, triangle, noise-shaped and more
- LUFS loudness normalization — ITU-R BS.1770 loudness measurement and gain adjustment
- ReplayGain — ReplayGain metadata normalization
- DST compression — native DST encoding, lossless DSD stream compression
- Native DSD recording — direct DSD stream recording, bypassing PCM intermediate format
- Pipe output mode —
-pipestdin/stdout pipeline processing - Statistics —
-statsoutput - Spectrogram —
-spectrogramgeneration - Reverse conversion —
--reverseDSD → PCM - User preset system —
-preset-load/save/list - Analysis reports —
-pdfrpPDF reports,-noise-profiling - Metadata support — full metadata parameters (artist, title, album, genre, etc.)
- Auto-pan correction — automatic channel offset detection and correction
- Equalizer — multi-band parametric EQ
- Harmonic saturation — tanh/poly/softclip/fullwave/tape distortion types
Improvements
- E-series noise shaping algorithms upgraded to double-precision floating point
- Optimized multi-threaded concurrency
- Improved large-file (over 4 GB) handling
- Enhanced DST encoding compatibility and stability
Fixes
- Fixed boundary stability of the noise shaper at certain sample rates
- Fixed metadata alignment when writing DFF
- Fixed OpenCL device enumeration compatibility
DpdoPackSACD
New Features
- Full SACD ISO authoring support
- Metadata system: album, artist, cover, genre, year, label, composer, conductor
- CUE track sheet import
- Dpdo DSD Disc (DVD-R/RW) support
- Barcode (EAN/UPC) and ISRC support
- Multichannel SACD support
DpdoPlayer
New Features
- Native DSD playback (DSF/DFF)
- Device selection (
-dev) - Channel layout configuration (
-layout) - Playback modes: standard, differential, BTL
- DoP modes: auto/force/native
- Volume control (
-vol) - Low-latency stream mode (
-stream) - Pipe input support
Known Issues
- 11th-order IIR is slow on some older CPUs; OpenCL acceleration recommended
- DST-compressed files may need decompression to DSF on some third-party players
- DpdoPlayer on macOS may require manual device-name configuration for some USB DACs