feat(audio): surface "JACK is not bit-perfect" in Audio settings

JACK routes through the JACK graph (resamples to the graph rate), so it
can't be bit-perfect — but nothing told the user. Add a `backend-is-jack`
flag (settings.rs computes it beside alsa/pipewire at both set-sites;
state.slint property) and a WarningBanner in AudioSettings, gated on it,
pointing at ALSA-direct / PipeWire-passthrough for bit-perfect. UI-only;
backend behavior unchanged.

Blind change (no build this session) — validates on the next qbz_ui build.

cc
This commit is contained in:
vicrodh committed 2026-06-30 09:27:07 -06:00
1 parent 67f5569af4
commit 6f7ff9956c
3 files changed
+15

No files matched your search

@@ -10,6 +10,7 @@ import { SettingsState, DacWizardActions } from "../state.slint";
import { QbzToggle } from "../primitives/QbzToggle.slint";
import { QbzSelect } from "../primitives/QbzSelect.slint";
import { QbzIcon } from "../primitives/QbzIcon.slint";
import { WarningBanner } from "../primitives/WarningBanner.slint";
import { SettingRow } from "SettingRow.slint";
component GroupHeader inherits Text {
@@ -95,6 +96,13 @@ export component AudioSettings inherits VerticalLayout {
}
}
}
// JACK routes through the JACK graph (resamples to the graph rate), so it
// can't be bit-perfect — surface that so the user isn't misled.
if SettingsState.backend-is-jack: WarningBanner {
variant: "warning";
title: @tr("JACK is not bit-perfect");
body: @tr("The JACK backend routes audio through the JACK graph, which resamples to the graph's sample rate. For bit-perfect playback use ALSA (direct) or PipeWire with passthrough.");
}
SettingRow {
label: @tr("Output device");
description: @tr("The DAC or sound device that receives audio.");
+1
View File
@@ -2804,6 +2804,7 @@ export global SettingsState {
// Audio — Rust-computed conditional flags driving `if`-gated rows.
in-out property <bool> backend-is-alsa: false;
in-out property <bool> backend-is-pipewire: false;
in-out property <bool> backend-is-jack: false;
in-out property <bool> alsa-plugin-is-hw: false;
// --- PLAYBACK ----------------------------------------------------------