Skip to content
This repository was archived by the owner on Jul 17, 2026. It is now read-only.

Commit 177a81b

Browse files
committed
✨ feat: 补充Web Audio 延迟策略的设置入口和逻辑
1 parent f608928 commit 177a81b

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

src/components/Setting/config/play.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,45 @@ export const usePlaySettings = (): SettingConfig => {
544544
set: (v) => handleAudioEngineSelect(v),
545545
}),
546546
},
547+
{
548+
key: "audioLatencyHint",
549+
label: "Web Audio 延迟策略",
550+
type: "select",
551+
tags: [{ text: "Beta", type: "warning" }],
552+
description:
553+
"调整 Web Audio 的延迟策略,修改后需重启。<br>" +
554+
"“低延迟模式(interactive)”延迟更低但可能不稳定;<br>" +
555+
"“高效能模式(playback)”延迟偏高但播放更稳定。<br>" +
556+
"已针对“高效能模式(playback)”补偿了音频输出延迟,理论上不会造成歌词与音频不同步的问题。",
557+
options: [
558+
{ label: "低延迟模式(interactive)", value: "interactive" },
559+
{ label: "高能效模式(playback)", value: "playback" },
560+
],
561+
value: computed({
562+
get: () => settingStore.audioLatencyHint,
563+
set: (v) => {
564+
window.$dialog.warning({
565+
title: "更改延迟策略",
566+
content: "此操作需要重启应用才能生效,是否立即重启?",
567+
positiveText: "重启",
568+
negativeText: "取消",
569+
onPositiveClick: () => {
570+
settingStore.audioLatencyHint = v;
571+
if (isElectron) {
572+
window.electron.ipcRenderer.send("win-restart");
573+
} else {
574+
window.location.reload();
575+
}
576+
},
577+
});
578+
},
579+
}),
580+
show: computed(
581+
() =>
582+
settingStore.playbackEngine === "web-audio" &&
583+
settingStore.audioEngine === "element",
584+
),
585+
},
547586
{
548587
key: "playSongDemo",
549588
label: "播放试听",

src/stores/setting.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ export interface SettingState {
188188
playDevice: "default" | string;
189189
/** 音频引擎: element (原生) 或 ffmpeg */
190190
audioEngine: "element" | "ffmpeg";
191+
/** Web Audio 延迟策略 */
192+
audioLatencyHint: "interactive" | "playback";
191193
/** 自动播放 */
192194
autoPlay: boolean;
193195
/** 预载下一首 */
@@ -563,6 +565,7 @@ export const useSettingStore = defineStore("setting", {
563565
songLevel: "exhigh",
564566
playDevice: "default",
565567
audioEngine: "element",
568+
audioLatencyHint: "interactive",
566569
autoPlay: false,
567570
useNextPrefetch: true,
568571
songVolumeFade: true,

0 commit comments

Comments
 (0)