diff --git a/src/renderer/hooks/MusicHook.ts b/src/renderer/hooks/MusicHook.ts index b062198..4e5498b 100644 --- a/src/renderer/hooks/MusicHook.ts +++ b/src/renderer/hooks/MusicHook.ts @@ -402,6 +402,7 @@ const setupAudioListeners = () => { let interval: any = null; // 播放状态恢复定时器:当 interval 因异常被清除时,自动恢复 let recoveryTimer: any = null; + let lyricThrottleCounter = 0; const clearInterval = () => { if (interval) { @@ -457,8 +458,21 @@ const setupAudioListeners = () => { sendLyricToWin(); } } - if (isElectron && isLyricWindowOpen.value) { - sendLyricToWin(); + // 节流发送轻量歌词进度更新(每 ~200ms / 约每 4 个 tick) + lyricThrottleCounter++; + if (isElectron && isLyricWindowOpen.value && lyricThrottleCounter % 4 === 0) { + try { + window.api.sendLyric( + JSON.stringify({ + type: 'update', + nowIndex: nowIndex.value, + nowTime: nowTime.value, + isPlay: getPlayerStore().play + }) + ); + } catch { + // 忽略发送失败 + } } } catch (error) { console.error('进度更新 interval 出错:', error); diff --git a/src/renderer/store/modules/playerCore.ts b/src/renderer/store/modules/playerCore.ts index bd19583..afc28c9 100644 --- a/src/renderer/store/modules/playerCore.ts +++ b/src/renderer/store/modules/playerCore.ts @@ -335,17 +335,8 @@ export const usePlayerCoreStore = defineStore( console.warn('预加载触发失败(可能是依赖未加载或循环依赖),已忽略:', e); } - let playInProgress = false; - try { - if (playInProgress) { - console.warn('播放操作正在进行中,避免重复调用'); - return true; - } - - playInProgress = true; const result = await playAudio(requestId); - playInProgress = false; if (result) { playbackRequestManager.completeRequest(requestId); @@ -356,7 +347,6 @@ export const usePlayerCoreStore = defineStore( } } catch (error) { console.error('自动播放音频失败:', error); - playInProgress = false; playbackRequestManager.failRequest(requestId); return false; } diff --git a/src/renderer/store/modules/playlist.ts b/src/renderer/store/modules/playlist.ts index 2f7e706..f396111 100644 --- a/src/renderer/store/modules/playlist.ts +++ b/src/renderer/store/modules/playlist.ts @@ -1,7 +1,7 @@ import { useThrottleFn } from '@vueuse/core'; import { createDiscreteApi } from 'naive-ui'; import { defineStore, storeToRefs } from 'pinia'; -import { computed, ref, shallowRef } from 'vue'; +import { computed, ref, shallowRef, triggerRef } from 'vue'; import i18n from '@/../i18n/renderer'; import { useSongDetail } from '@/hooks/usePlayerHooks'; @@ -83,6 +83,8 @@ export const usePlaylistStore = defineStore( playList.value[startIndex + index] = song; } }); + // 触发 shallowRef 响应式更新(直接修改元素不会自动触发) + triggerRef(playList); // 预加载下一首歌曲的音频和封面 if (nextSong) {