Skip to content

slim2Diretta v1.4.3

Choose a tag to compare

@cometdom cometdom released this 06 Jun 12:33
· 8 commits to main since this release

Fixed

DoP: valid DoP silence at track transitions (no more crackle) — reported by daniellyk8 (Roon + slim2diretta → licensed Diretta target, on Audiolinux).

With a DoP source (Roon sends DSD as DoP over Slimproto, format code p), a crack/pop was intermittently audible just before the next track started on track change, stop, or fast-forward.

Root cause: DoP is carried through the 24-bit PCM path (isDSD=false, matching DirettaRendererUPnP), but the silence buffers injected at every transition — the quick-resume flush, shutdown silence, the 5 s idle release, underrun/rebuffering — were filled with plain 0x00. For a DAC locked in DoP that is not valid silence: the 0x00 marker byte breaks DoP framing (markers must alternate 0x05/0xFA) and 0x00 is not DSD idle (0x69), so the DAC briefly drops DoP lock and emits a full-scale crack. It was intermittent because the crack only occurs when a silence buffer actually reaches the DAC while it is still in DoP lock (timing-dependent).

Fix: the silence path is now DoP-aware. When the stream is DoP, getNewStream() fills silence with a valid DoP idle pattern (24-bit LE packed, payload 0x69, marker alternating 0x05/0xFA per frame — exactly the form detectDoP() validates) instead of 0x00. Plain PCM (0x00) and native DSD (0x69) silence are unchanged — no behavioural change for non-DoP playback. The DoP idle pattern is generated worker-thread-locally from the cached channel count (no shared buffer, no extra locking on the real-time path) and rebuilt only when the format changes.

Note: verified by reasoning (byte-exact against the existing 24-bit pack path), not yet on real DoP hardware. Feedback from DoP users welcome.

This release also folds in the v1.4.2 web UI change (comma-separated values canonicalised at save time).

See CHANGELOG.md for full details.