Contexte
WaveFlow décode aujourd'hui les fichiers DSD (.dsf / .dff) uniquement en DSD → PCM : le flux 1-bit est converti en PCM via un FIR Blackman-Harris (taps réglables 256 / 1024 / 2048, profile_setting['audio.dsd_precision']), puis envoyé à la sortie comme n'importe quel flux PCM.
Pour le public audiophile (celui qui active déjà WASAPI Exclusive + la précision DSD), il manque le vrai DSD bit-perfect : envoyer le flux 1-bit tel quel à un DAC compatible, qui le décode nativement, au lieu de le convertir en PCM côté hôte.
Objectif — DSD natif via DoP (DSD over PCM)
Ajouter un chemin DoP : encapsuler le flux DSD 1-bit dans des trames PCM (marqueurs 0x05 / 0xFA en poids fort, échantillons 24-bit @ dsd_rate / 16) et l'envoyer au DAC en WASAPI Exclusive uniquement. Le DAC détecte le motif DoP, reconstruit le flux 1-bit d'origine et affiche « DSD » — sortie réellement bit-perfect. Cibles : DSD64 / DSD128 / DSD256.
Périmètre v1 (Windows-only)
Contraintes techniques
- WASAPI Exclusive obligatoire : le DoP ne passe pas par le mixeur partagé Windows (il resample → détruit le motif). Uniquement sur le chemin
wasapi_exclusive.rs.
- Hot path audio : l'encapsulation DoP se fait côté décodeur (avant le ring SPSC), jamais dans le callback. Respecter la règle « le callback n'alloue/lock/log pas ».
- Volume géré par le DAC/ampli en DoP (bit-perfect oblige — pas de gain côté hôte). Griser / neutraliser le volume logiciel quand le chemin DoP est actif, comme pour le bit-perfect existant.
- Fallback silencieux si le DAC refuse : retomber sur DSD → PCM sans erreur visible, juste le badge qui change.
Hors périmètre v1
- macOS / Linux (l'équivalent CoreAudio / ALSA DoP est un chantier séparé).
- DSD512+ (à ajouter si un DAC de test le supporte).
Notes
- Le chemin DSD → PCM existant reste le comportement par défaut et le fallback ; DoP est une couche opt-in par-dessus, sans régression pour les DAC non compatibles.
Contexte
WaveFlow décode aujourd'hui les fichiers DSD (
.dsf/.dff) uniquement en DSD → PCM : le flux 1-bit est converti en PCM via un FIR Blackman-Harris (taps réglables 256 / 1024 / 2048,profile_setting['audio.dsd_precision']), puis envoyé à la sortie comme n'importe quel flux PCM.waveflow_core::audio_format::dsd(DsdToPcm::new_with_taps)ActiveStream::openaudio/wasapi_exclusive.rs(Windows, opt-in, fallback cpal shared)Pour le public audiophile (celui qui active déjà WASAPI Exclusive + la précision DSD), il manque le vrai DSD bit-perfect : envoyer le flux 1-bit tel quel à un DAC compatible, qui le décode nativement, au lieu de le convertir en PCM côté hôte.
Objectif — DSD natif via DoP (DSD over PCM)
Ajouter un chemin DoP : encapsuler le flux DSD 1-bit dans des trames PCM (marqueurs
0x05/0xFAen poids fort, échantillons 24-bit @dsd_rate / 16) et l'envoyer au DAC en WASAPI Exclusive uniquement. Le DAC détecte le motif DoP, reconstruit le flux 1-bit d'origine et affiche « DSD » — sortie réellement bit-perfect. Cibles : DSD64 / DSD128 / DSD256.Périmètre v1 (Windows-only)
dsd_rate / 16(DSD64 → 176.4 kHz, DSD128 → 352.8 kHz, DSD256 → 705.6 kHz).AudioPipelinePopover/AudioQualityFooter(« DSD natif » vs « DSD → PCM »).docs/features/playback.md+ note cross-cutting DSD dansCLAUDE.md.Contraintes techniques
wasapi_exclusive.rs.Hors périmètre v1
Notes