Conversion rides the existing play_streaming path as an exact-size 88.2 kHz/24-bit WAV. DoP and native DSD (Phases 2-3) get a dedicated direct engine: additive S32/DSD_U32 ALSA stream constructors and a verbatim i32 write path (no f32, no gain), a writer thread that feeds 0x69 DSD silence on pause and pads stream teardown, and a source queue for gapless DSD. AudioSettings gains dsd_mode (convert|dop|native, default convert). Delivery resolves per track: user mode + ALSA direct backend + stereo + rate support, everything else converts. Seek is ignored in direct modes and the pause suspend path is gated off there. cc
42 lines
911 B
TOML
42 lines
911 B
TOML
[package]
|
|
name = "qbz-player"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
description = "Playback engine and queue management for QBZ"
|
|
|
|
[dependencies]
|
|
qbz-models = { path = "../qbz-models" }
|
|
qbz-audio = { path = "../qbz-audio" }
|
|
qbz-qobuz = { path = "../qbz-qobuz" }
|
|
qbz-cmaf = { path = "../qbz-cmaf" }
|
|
qbz-dsd = { path = "../qbz-dsd" }
|
|
qbz-cache = { path = "../qbz-cache" }
|
|
|
|
# Serialization
|
|
serde = { workspace = true }
|
|
|
|
# Async
|
|
tokio = { workspace = true }
|
|
async-trait = { workspace = true }
|
|
futures-util = { workspace = true }
|
|
tokio-stream = { workspace = true }
|
|
|
|
# Logging
|
|
log = { workspace = true }
|
|
|
|
# Error handling
|
|
thiserror = { workspace = true }
|
|
|
|
# Random (for shuffle)
|
|
rand = "0.9"
|
|
|
|
# Audio decoding
|
|
symphonia = { workspace = true }
|
|
|
|
# Audio playback
|
|
rodio = { version = "0.22", features = ["symphonia-all"] }
|
|
|
|
# HTTP client for streaming
|
|
reqwest = { workspace = true }
|