diff --git a/src/common/types/desktop_lyric.d.ts b/src/common/types/desktop_lyric.d.ts index dd05f266..feb0f49a 100644 --- a/src/common/types/desktop_lyric.d.ts +++ b/src/common/types/desktop_lyric.d.ts @@ -34,6 +34,7 @@ declare namespace LX { 'player.isShowLyricTranslation': LX.AppSetting['player.isShowLyricTranslation'] 'player.isShowLyricRoma': LX.AppSetting['player.isShowLyricRoma'] 'player.isPlayLxlrc': LX.AppSetting['player.isPlayLxlrc'] + 'player.playbackRate': LX.AppSetting['player.playbackRate'] } type WinMainActions = 'get_info' | 'get_status' | 'get_analyser_data_array' @@ -63,7 +64,6 @@ declare namespace LX { | LyricAction<'set_status', { isPlay: boolean line: number - rate: number played_time: number }> | LyricAction<'set_lyric', { diff --git a/src/main/modules/winLyric/utils.ts b/src/main/modules/winLyric/utils.ts index 33925469..b55e1e18 100644 --- a/src/main/modules/winLyric/utils.ts +++ b/src/main/modules/winLyric/utils.ts @@ -84,6 +84,7 @@ export const watchConfigKeys = [ 'player.isShowLyricTranslation', 'player.isShowLyricRoma', 'player.isPlayLxlrc', + 'player.playbackRate', ] as const export const buildLyricConfig = (appSetting: Partial): Partial => { diff --git a/src/renderer-lyric/core/lyric.ts b/src/renderer-lyric/core/lyric.ts index 73e6ddc0..040668d5 100644 --- a/src/renderer-lyric/core/lyric.ts +++ b/src/renderer-lyric/core/lyric.ts @@ -9,6 +9,7 @@ export const init = () => { lrc = new Lyric({ shadowContent: true, activeLineClassName: 'active', + rate: setting['player.playbackRate'], isVertical: setting['desktopLyric.direction'] == 'vertical', onPlay(line, text) { setText(text, line) diff --git a/src/renderer-lyric/core/mainWindowChannel.ts b/src/renderer-lyric/core/mainWindowChannel.ts index 5ecdd192..ff16f257 100644 --- a/src/renderer-lyric/core/mainWindowChannel.ts +++ b/src/renderer-lyric/core/mainWindowChannel.ts @@ -41,7 +41,6 @@ const handleDesktopLyricMessage = (event: LX.DesktopLyric.LyricActions) => { break case 'set_status': setIsPlay(event.data.isPlay) - setPlaybackRate(event.data.rate) if (event.data.isPlay) play(event.data.played_time) else pause() break diff --git a/src/renderer-lyric/store/state.ts b/src/renderer-lyric/store/state.ts index ee30eb03..203b75a9 100644 --- a/src/renderer-lyric/store/state.ts +++ b/src/renderer-lyric/store/state.ts @@ -34,6 +34,7 @@ export const setting = shallowReactive({ 'player.isShowLyricTranslation': false, 'player.isShowLyricRoma': false, 'player.isPlayLxlrc': false, + 'player.playbackRate': 1, }) // export const themeList = markRaw([ diff --git a/src/renderer-lyric/useApp/useLyric.ts b/src/renderer-lyric/useApp/useLyric.ts index 15bd5f7e..13469caf 100644 --- a/src/renderer-lyric/useApp/useLyric.ts +++ b/src/renderer-lyric/useApp/useLyric.ts @@ -1,11 +1,20 @@ import { watch } from '@common/utils/vueTools' -import { setLyric, setVertical } from '@lyric/core/lyric' -import { setting } from '@lyric/store/state' +import { setLyric, setVertical, setPlaybackRate } from '@lyric/core/lyric' +import { getStatus } from '@lyric/core/mainWindowChannel' +import { isPlay, setting } from '@lyric/store/state' export default () => { watch(() => setting['player.isShowLyricTranslation'], setLyric) watch(() => setting['player.isShowLyricRoma'], setLyric) watch(() => setting['player.isPlayLxlrc'], setLyric) + watch(() => setting['player.playbackRate'], (rate) => { + setPlaybackRate(rate) + if (isPlay.value) { + setTimeout(() => { + getStatus() + }) + } + }) watch(() => setting['desktopLyric.direction'], (direction) => { setVertical(direction == 'vertical') // if (isPlay.value) diff --git a/src/renderer/components/common/PlaybackRateBtn.vue b/src/renderer/components/common/PlaybackRateBtn.vue index 0da3d73e..a9d49279 100644 --- a/src/renderer/components/common/PlaybackRateBtn.vue +++ b/src/renderer/components/common/PlaybackRateBtn.vue @@ -1,6 +1,6 @@