feat(qt): Settings > Audio > Loudness — normalization toggle, target loudness presets, clipping guard

The bars' audio flyout keeps its switch; Settings > Audio gains the same
key with its two companions: a Target loudness select (-11 / -14 default /
-16 / -18 / -23 LUFS, a value set elsewhere shows as a display-only
"Custom (N LUFS)" entry instead of being re-mapped) and the Prevent
clipping toggle. Eight catalogs updated.

cc
This commit is contained in:
vicrodh committed 2026-09-13 11:25:22 -06:00
1 parent ec7311ce54
commit d22907b0e0
10 files changed
+481

No files matched your search

@@ -7575,3 +7575,51 @@ msgstr "Entfernt alles, was zum Offline-Hören gespeichert ist: {} mit {}. Gekau
#: qbz-qt/qml/settings/SettingsView.qml
msgid "Advanced"
msgstr "Erweitert"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "LOUDNESS"
msgstr "LAUTHEIT"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Volume normalization"
msgstr "Lautstärkenormalisierung"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Target loudness"
msgstr "Ziel-Lautheit"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference."
msgstr "Die Lautheit, auf die jeder Titel angeglichen wird. -14 LUFS entspricht Streaming-Diensten, -18 LUFS ist die ReplayGain-Referenz."
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Prevent clipping"
msgstr "Übersteuerung vermeiden"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip."
msgstr "Begrenzt die Anhebung, damit der lauteste Pegel unter der Vollaussteuerung bleibt. Aus: leise Titel erreichen das Ziel, auch wenn ihre Spitzen übersteuern."
#: qbz-qt/src/settings_qt.rs
msgid "-11 LUFS · Loud"
msgstr "-11 LUFS · Laut"
#: qbz-qt/src/settings_qt.rs
msgid "-14 LUFS · Streaming (default)"
msgstr "-14 LUFS · Streaming (Standard)"
#: qbz-qt/src/settings_qt.rs
msgid "-16 LUFS · Apple Music"
msgstr "-16 LUFS · Apple Music"
#: qbz-qt/src/settings_qt.rs
msgid "-18 LUFS · ReplayGain"
msgstr "-18 LUFS · ReplayGain"
#: qbz-qt/src/settings_qt.rs
msgid "-23 LUFS · Broadcast (EBU R128)"
msgstr "-23 LUFS · Rundfunk (EBU R128)"
#: qbz-qt/src/settings_qt.rs
msgid "Custom ({} LUFS)"
msgstr "Benutzerdefiniert ({} LUFS)"
@@ -3201,3 +3201,55 @@ msgstr "Removes everything saved for offline listening: {} using {}. Purchased d
#: qbz-qt/qml/settings/SettingsView.qml
msgid "Advanced"
msgstr "Advanced"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "LOUDNESS"
msgstr "LOUDNESS"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Volume normalization"
msgstr "Volume normalization"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Level loudness across tracks"
msgstr "Level loudness across tracks"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Target loudness"
msgstr "Target loudness"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference."
msgstr "The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference."
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Prevent clipping"
msgstr "Prevent clipping"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip."
msgstr "Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip."
#: qbz-qt/src/settings_qt.rs
msgid "-11 LUFS · Loud"
msgstr "-11 LUFS · Loud"
#: qbz-qt/src/settings_qt.rs
msgid "-14 LUFS · Streaming (default)"
msgstr "-14 LUFS · Streaming (default)"
#: qbz-qt/src/settings_qt.rs
msgid "-16 LUFS · Apple Music"
msgstr "-16 LUFS · Apple Music"
#: qbz-qt/src/settings_qt.rs
msgid "-18 LUFS · ReplayGain"
msgstr "-18 LUFS · ReplayGain"
#: qbz-qt/src/settings_qt.rs
msgid "-23 LUFS · Broadcast (EBU R128)"
msgstr "-23 LUFS · Broadcast (EBU R128)"
#: qbz-qt/src/settings_qt.rs
msgid "Custom ({} LUFS)"
msgstr "Custom ({} LUFS)"
@@ -7581,3 +7581,51 @@ msgstr "Elimina todo lo guardado para escuchar sin conexión: {} que ocupan {}.
#: qbz-qt/qml/settings/SettingsView.qml
msgid "Advanced"
msgstr "Avanzado"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "LOUDNESS"
msgstr "SONORIDAD"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Volume normalization"
msgstr "Normalización de volumen"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Target loudness"
msgstr "Sonoridad objetivo"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference."
msgstr "La sonoridad a la que se alinea cada pista. -14 LUFS coincide con los servicios de streaming; -18 LUFS es la referencia de ReplayGain."
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Prevent clipping"
msgstr "Evitar recorte"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip."
msgstr "Limita el realce para que el pico más alto quede por debajo de la escala completa. Desactivado, las pistas silenciosas alcanzan el objetivo aunque sus picos recorten."
#: qbz-qt/src/settings_qt.rs
msgid "-11 LUFS · Loud"
msgstr "-11 LUFS · Fuerte"
#: qbz-qt/src/settings_qt.rs
msgid "-14 LUFS · Streaming (default)"
msgstr "-14 LUFS · Streaming (predeterminado)"
#: qbz-qt/src/settings_qt.rs
msgid "-16 LUFS · Apple Music"
msgstr "-16 LUFS · Apple Music"
#: qbz-qt/src/settings_qt.rs
msgid "-18 LUFS · ReplayGain"
msgstr "-18 LUFS · ReplayGain"
#: qbz-qt/src/settings_qt.rs
msgid "-23 LUFS · Broadcast (EBU R128)"
msgstr "-23 LUFS · Radiodifusión (EBU R128)"
#: qbz-qt/src/settings_qt.rs
msgid "Custom ({} LUFS)"
msgstr "Personalizado ({} LUFS)"
@@ -7573,3 +7573,51 @@ msgstr "Supprime tout ce qui est enregistré pour l'écoute hors ligne : {} occu
#: qbz-qt/qml/settings/SettingsView.qml
msgid "Advanced"
msgstr "Avancé"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "LOUDNESS"
msgstr "SONIE"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Volume normalization"
msgstr "Normalisation du volume"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Target loudness"
msgstr "Sonie cible"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference."
msgstr "La sonie à laquelle chaque morceau est aligné. -14 LUFS correspond aux services de streaming, -18 LUFS est la référence ReplayGain."
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Prevent clipping"
msgstr "Éviter l'écrêtage"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip."
msgstr "Limite l'amplification pour que le pic le plus fort reste sous la pleine échelle. Désactivé, les morceaux faibles atteignent la cible même si leurs pics écrêtent."
#: qbz-qt/src/settings_qt.rs
msgid "-11 LUFS · Loud"
msgstr "-11 LUFS · Fort"
#: qbz-qt/src/settings_qt.rs
msgid "-14 LUFS · Streaming (default)"
msgstr "-14 LUFS · Streaming (par défaut)"
#: qbz-qt/src/settings_qt.rs
msgid "-16 LUFS · Apple Music"
msgstr "-16 LUFS · Apple Music"
#: qbz-qt/src/settings_qt.rs
msgid "-18 LUFS · ReplayGain"
msgstr "-18 LUFS · ReplayGain"
#: qbz-qt/src/settings_qt.rs
msgid "-23 LUFS · Broadcast (EBU R128)"
msgstr "-23 LUFS · Diffusion (EBU R128)"
#: qbz-qt/src/settings_qt.rs
msgid "Custom ({} LUFS)"
msgstr "Personnalisé ({} LUFS)"
@@ -7556,3 +7556,51 @@ msgstr "オフライン再生用に保存したものをすべて削除します
#: qbz-qt/qml/settings/SettingsView.qml
msgid "Advanced"
msgstr "詳細"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "LOUDNESS"
msgstr "ラウドネス"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Volume normalization"
msgstr "音量ノーマライズ"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Target loudness"
msgstr "目標ラウドネス"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference."
msgstr "各トラックを揃えるラウドネス。-14 LUFS はストリーミングサービスの基準、-18 LUFS は ReplayGain の基準です。"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Prevent clipping"
msgstr "クリッピングを防止"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip."
msgstr "最大ピークがフルスケールを超えないようブーストを制限します。オフにすると、ピークがクリップしても静かなトラックが目標に達します。"
#: qbz-qt/src/settings_qt.rs
msgid "-11 LUFS · Loud"
msgstr "-11 LUFS · 大きめ"
#: qbz-qt/src/settings_qt.rs
msgid "-14 LUFS · Streaming (default)"
msgstr "-14 LUFS · ストリーミング(既定)"
#: qbz-qt/src/settings_qt.rs
msgid "-16 LUFS · Apple Music"
msgstr "-16 LUFS · Apple Music"
#: qbz-qt/src/settings_qt.rs
msgid "-18 LUFS · ReplayGain"
msgstr "-18 LUFS · ReplayGain"
#: qbz-qt/src/settings_qt.rs
msgid "-23 LUFS · Broadcast (EBU R128)"
msgstr "-23 LUFS · 放送 (EBU R128)"
#: qbz-qt/src/settings_qt.rs
msgid "Custom ({} LUFS)"
msgstr "カスタム({} LUFS)"
@@ -7563,3 +7563,51 @@ msgstr "Verwijdert alles wat voor offline luisteren is opgeslagen: {} met {}. Ge
#: qbz-qt/qml/settings/SettingsView.qml
msgid "Advanced"
msgstr "Geavanceerd"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "LOUDNESS"
msgstr "LUIDHEID"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Volume normalization"
msgstr "Volumenormalisatie"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Target loudness"
msgstr "Doelluidheid"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference."
msgstr "De luidheid waarop elke track wordt afgestemd. -14 LUFS komt overeen met streamingdiensten, -18 LUFS is de ReplayGain-referentie."
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Prevent clipping"
msgstr "Clipping voorkomen"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip."
msgstr "Begrenst de versterking zodat de luidste piek onder volle schaal blijft. Uit: stille tracks bereiken het doel, ook als hun pieken clippen."
#: qbz-qt/src/settings_qt.rs
msgid "-11 LUFS · Loud"
msgstr "-11 LUFS · Luid"
#: qbz-qt/src/settings_qt.rs
msgid "-14 LUFS · Streaming (default)"
msgstr "-14 LUFS · Streaming (standaard)"
#: qbz-qt/src/settings_qt.rs
msgid "-16 LUFS · Apple Music"
msgstr "-16 LUFS · Apple Music"
#: qbz-qt/src/settings_qt.rs
msgid "-18 LUFS · ReplayGain"
msgstr "-18 LUFS · ReplayGain"
#: qbz-qt/src/settings_qt.rs
msgid "-23 LUFS · Broadcast (EBU R128)"
msgstr "-23 LUFS · Omroep (EBU R128)"
#: qbz-qt/src/settings_qt.rs
msgid "Custom ({} LUFS)"
msgstr "Aangepast ({} LUFS)"
@@ -7573,3 +7573,51 @@ msgstr "Remove tudo o que está salvo para ouvir offline: {} ocupando {}. As com
#: qbz-qt/qml/settings/SettingsView.qml
msgid "Advanced"
msgstr "Avançado"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "LOUDNESS"
msgstr "SONORIDADE"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Volume normalization"
msgstr "Normalização de volume"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Target loudness"
msgstr "Sonoridade alvo"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference."
msgstr "A sonoridade à qual cada faixa é alinhada. -14 LUFS corresponde aos serviços de streaming; -18 LUFS é a referência do ReplayGain."
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Prevent clipping"
msgstr "Evitar clipping"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip."
msgstr "Limita o ganho para que o pico mais alto fique abaixo da escala completa. Desligado, as faixas baixas atingem o alvo mesmo que os picos cortem."
#: qbz-qt/src/settings_qt.rs
msgid "-11 LUFS · Loud"
msgstr "-11 LUFS · Alto"
#: qbz-qt/src/settings_qt.rs
msgid "-14 LUFS · Streaming (default)"
msgstr "-14 LUFS · Streaming (padrão)"
#: qbz-qt/src/settings_qt.rs
msgid "-16 LUFS · Apple Music"
msgstr "-16 LUFS · Apple Music"
#: qbz-qt/src/settings_qt.rs
msgid "-18 LUFS · ReplayGain"
msgstr "-18 LUFS · ReplayGain"
#: qbz-qt/src/settings_qt.rs
msgid "-23 LUFS · Broadcast (EBU R128)"
msgstr "-23 LUFS · Radiodifusão (EBU R128)"
#: qbz-qt/src/settings_qt.rs
msgid "Custom ({} LUFS)"
msgstr "Personalizado ({} LUFS)"
@@ -7594,3 +7594,51 @@ msgstr "Удаляет всё, что сохранено для прослуши
#: qbz-qt/qml/settings/SettingsView.qml
msgid "Advanced"
msgstr "Дополнительно"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "LOUDNESS"
msgstr "ГРОМКОСТЬ"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Volume normalization"
msgstr "Нормализация громкости"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Target loudness"
msgstr "Целевая громкость"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference."
msgstr "Громкость, к которой приводится каждый трек. -14 LUFS соответствует стриминговым сервисам, -18 LUFS — эталон ReplayGain."
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Prevent clipping"
msgstr "Не допускать клиппинга"
#: qbz-qt/qml/settings/AudioSettings.qml
msgid "Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip."
msgstr "Ограничивает усиление, чтобы самый громкий пик оставался ниже полной шкалы. Выключено — тихие треки достигают цели, даже если их пики клиппируют."
#: qbz-qt/src/settings_qt.rs
msgid "-11 LUFS · Loud"
msgstr "-11 LUFS · Громко"
#: qbz-qt/src/settings_qt.rs
msgid "-14 LUFS · Streaming (default)"
msgstr "-14 LUFS · Стриминг (по умолчанию)"
#: qbz-qt/src/settings_qt.rs
msgid "-16 LUFS · Apple Music"
msgstr "-16 LUFS · Apple Music"
#: qbz-qt/src/settings_qt.rs
msgid "-18 LUFS · ReplayGain"
msgstr "-18 LUFS · ReplayGain"
#: qbz-qt/src/settings_qt.rs
msgid "-23 LUFS · Broadcast (EBU R128)"
msgstr "-23 LUFS · Вещание (EBU R128)"
#: qbz-qt/src/settings_qt.rs
msgid "Custom ({} LUFS)"
msgstr "Своё значение ({} LUFS)"
@@ -350,6 +350,44 @@ Column {
SettingsDivider { }
SettingsSpacer { }
// ============================= LOUDNESS ==============================
// The bars' audio flyout keeps its normalization switch; this is the
// same key with its two companions. Target and clipping guard only show
// while normalization is on.
GroupHeader { kioskHost: root.kioskHost; text: QbzSession.tr("LOUDNESS", QbzSession.trRev) }
SettingRow { kioskHost: root.kioskHost;
label: QbzSession.tr("Volume normalization", QbzSession.trRev)
description: QbzSession.tr("Level loudness across tracks", QbzSession.trRev)
QbzToggle { kioskHost: root.kioskHost;
checked: root.doc.normalization === true
onToggled: function (v) { QbzBridge.settingsBool("normalization", v) }
}
}
SettingRow { kioskHost: root.kioskHost;
visible: root.doc.normalization === true
label: QbzSession.tr("Target loudness", QbzSession.trRev)
description: QbzSession.tr("The loudness every track is aligned to. -14 LUFS matches streaming services, -18 LUFS is the ReplayGain reference.", QbzSession.trRev)
QbzSelect { kioskHost: root.kioskHost;
menuWidth: 260
options: root.doc.normalizationTargets || []
currentIndex: root.doc.normalizationTargetIndex || 0
onSelected: function (i) { QbzBridge.settingsSelect("normalization-target", i) }
}
}
SettingRow { kioskHost: root.kioskHost;
visible: root.doc.normalization === true
label: QbzSession.tr("Prevent clipping", QbzSession.trRev)
description: QbzSession.tr("Cap the boost so the loudest peak stays under full scale. Off lets quiet tracks reach the target even if their peaks clip.", QbzSession.trRev)
QbzToggle { kioskHost: root.kioskHost;
checked: root.doc.normalizationPreventClipping === true
onToggled: function (v) { QbzBridge.settingsBool("normalization-prevent-clipping", v) }
}
}
SettingsSpacer { }
SettingsDivider { }
SettingsSpacer { }
// ============================= STARTUP ===============================
GroupHeader { kioskHost: root.kioskHost; text: QbzSession.tr("STARTUP", QbzSession.trRev) }
SettingRow { kioskHost: root.kioskHost;
+55
View File
@@ -1600,6 +1600,21 @@ fn save_myqbz_label(label: &str) {
pub const STREAMING_QUALITY_KEYS: &[&str] = &["mp3", "cd", "hires", "hires_plus"];
pub const STREAMING_QUALITY_LABELS: &[&str] = &["MP3", "CD Quality", "Hi-Res", "Hi-Res+"];
/// Target loudness presets (label msgid, LUFS). Index 1 is the store default.
pub(crate) const NORMALIZATION_TARGETS: &[(&str, f32)] = &[
("-11 LUFS · Loud", -11.0),
("-14 LUFS · Streaming (default)", -14.0),
("-16 LUFS · Apple Music", -16.0),
("-18 LUFS · ReplayGain", -18.0),
("-23 LUFS · Broadcast (EBU R128)", -23.0),
];
fn normalization_target_index(lufs: f32) -> Option<usize> {
NORMALIZATION_TARGETS
.iter()
.position(|(_, v)| (v - lufs).abs() < 0.01)
}
// ---------------------------------------------------------------------------
// Snapshot
// ---------------------------------------------------------------------------
@@ -2084,6 +2099,15 @@ pub struct SettingsDoc {
/// Settable via settingsBool("normalization", …) but never published
/// back, so both now-playing bars had to shadow the toggle locally.
pub normalization: bool,
/// Target loudness presets (translated labels) + the selected index; a
/// value outside the presets (qbzd CLI, an import) shows as a trailing
/// "Custom (N LUFS)" entry rather than being silently re-mapped.
#[serde(rename = "normalizationTargets")]
pub normalization_targets: Vec<String>,
#[serde(rename = "normalizationTargetIndex")]
pub normalization_target_index: i32,
#[serde(rename = "normalizationPreventClipping")]
pub normalization_prevent_clipping: bool,
#[serde(rename = "persistSession")]
pub persist_session: bool,
#[serde(rename = "resumePosition")]
@@ -2634,6 +2658,24 @@ pub async fn publish_snapshot() {
show_context_icon: prefs.show_context_icon,
gapless: audio_settings.gapless_enabled,
normalization: audio_settings.normalization_enabled,
normalization_targets: {
let mut v: Vec<String> = NORMALIZATION_TARGETS
.iter()
.map(|(l, _)| qbz_i18n::t(l))
.collect();
if normalization_target_index(audio_settings.normalization_target_lufs).is_none() {
v.push(qbz_i18n::t_args(
"Custom ({} LUFS)",
&[&format!("{:.0}", audio_settings.normalization_target_lufs)],
));
}
v
},
normalization_target_index: normalization_target_index(
audio_settings.normalization_target_lufs,
)
.unwrap_or(NORMALIZATION_TARGETS.len()) as i32,
normalization_prevent_clipping: audio_settings.normalization_prevent_clipping,
persist_session: prefs.persist_session,
resume_position: prefs.resume_playback_position,
stream_uncached: audio_settings.stream_first_track,
@@ -3504,6 +3546,9 @@ pub async fn settings_bool(runtime: &Arc<AppRuntime<LoggingAdapter>>, key: &str,
"normalization" => {
with_audio(|s| s.set_normalization_enabled(value)).map(|_| Apply::Reload)
}
"normalization-prevent-clipping" => {
with_audio(|s| s.set_normalization_prevent_clipping(value)).map(|_| Apply::Reload)
}
"stream-uncached" => with_audio(|s| s.set_stream_first_track(value)).map(|_| Apply::Reload),
"streaming-only" => with_audio(|s| s.set_streaming_only(value)).map(|_| Apply::Reload),
"continue-playback" => {
@@ -4147,6 +4192,16 @@ pub async fn settings_select(runtime: &Arc<AppRuntime<LoggingAdapter>>, key: &st
}
apply_audio(runtime, Apply::Reload);
}
"normalization-target" => {
let Some((_, lufs)) = NORMALIZATION_TARGETS.get(index) else {
return; // the trailing "Custom" entry is display-only
};
if let Err(e) = with_audio(|s| s.set_normalization_target_lufs(*lufs)) {
log::error!("[qbz-qt] persist normalization target failed: {e}");
return;
}
apply_audio(runtime, Apply::Reload);
}
"qconnect-startup" => {
let Some(mode) = QCONNECT_STARTUP_VALUES.get(index) else {
return;