diff --git a/publish/changeLog.md b/publish/changeLog.md index 81342210..526dbc1b 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -7,3 +7,4 @@ - 修复某些情况下歌曲播放出错时不会自动切歌的问题 - 修复关闭“显示切换动画”设置后,在应用启动时该设置没有被应用的问题 +- 修复原始歌词存在偏移时,歌词偏移设置的重置未按预期工作的问题 diff --git a/src/renderer/components/core/PlayDetail/LyricPlayer.vue b/src/renderer/components/core/PlayDetail/LyricPlayer.vue index 2acc5a3a..2233576c 100644 --- a/src/renderer/components/core/PlayDetail/LyricPlayer.vue +++ b/src/renderer/components/core/PlayDetail/LyricPlayer.vue @@ -78,12 +78,14 @@ export default { lyric: '', tlyric: '', lxlyric: '', + rawlyric: '', musicInfo: null, }) const updateMusicInfo = () => { lyricInfo.lyric = playerMusicInfo.lrc lyricInfo.tlyric = playerMusicInfo.tlrc lyricInfo.lxlyric = playerMusicInfo.lxlrc + lyricInfo.rawlyric = playerMusicInfo.rawlrc lyricInfo.musicInfo = musicInfoItem.value } const handleShowLyricMenu = event => { @@ -98,7 +100,7 @@ export default { tlrc: tlyric, lxlrc: lxlyric, }) - console.log(offset) + // console.log(offset) window.eventHub.emit(eventPlayerNames.updateLyricOffset, offset) } diff --git a/src/renderer/components/core/PlayDetail/components/LyricMenu.vue b/src/renderer/components/core/PlayDetail/components/LyricMenu.vue index 116f11fc..77c2abea 100644 --- a/src/renderer/components/core/PlayDetail/components/LyricMenu.vue +++ b/src/renderer/components/core/PlayDetail/components/LyricMenu.vue @@ -29,7 +29,7 @@
{{$t('lyric_menu__offset', { offset })}}
- +
@@ -59,6 +59,15 @@ const removeLyric = debounce(musicInfo => { removeLyricEdited(musicInfo) }) +const getOffset = lrc => { + let offset = offsetTagRxp.exec(lrc) + if (offset) { + offset = parseInt(offset[1]) + if (Number.isNaN(offset)) offset = 0 + } else offset = 0 + return offset +} + export default { name: 'LyricMenu', props: { @@ -75,6 +84,7 @@ export default { const offset = ref(0) const offsetDisabled = ref(true) + const originOffset = ref(0) const visible = computed(() => props.modelValue) const musicInfo = computed(() => props.lyricInfo.musicInfo) @@ -115,13 +125,15 @@ export default { if (lxlyric) lxlyric = `[offset:${offset}]\n` + lxlyric } - if (offset) { + if (offset == originOffset.value) { + removeLyric(props.lyricInfo.musicInfo) + } else { saveLyric(props.lyricInfo.musicInfo, { lyric, tlyric, lxlyric, }) - } else removeLyric(props.lyricInfo.musicInfo) + } emit('updateLyric', { lyric, @@ -135,25 +147,15 @@ export default { updateLyric(offset.value) } const offsetReset = () => { - if (!offset.value) return - offset.value = 0 - updateLyric(0) + if (offset.value == originOffset.value) return + offset.value = originOffset.value + updateLyric(originOffset.value) } const parseLrcOffset = () => { - let lrcOffset - if (props.lyricInfo.lyric) { - lrcOffset = offsetTagRxp.exec(props.lyricInfo.lyric) - if (lrcOffset) { - lrcOffset = parseInt(lrcOffset[1]) - if (Number.isNaN(lrcOffset)) lrcOffset = 0 - } else lrcOffset = 0 - offsetDisabled.value = false - } else { - offsetDisabled.value = true - lrcOffset = 0 - } - offset.value = lrcOffset + offset.value = getOffset(props.lyricInfo.lyric) + originOffset.value = getOffset(props.lyricInfo.rawlyric) + offsetDisabled.value = !props.lyricInfo.lyric } @@ -177,6 +179,7 @@ export default { menuStyles, playDetailSetting, offset, + originOffset, fontSizeUp, fontSizeDown, fontSizeReset, diff --git a/src/renderer/core/share/player.js b/src/renderer/core/share/player.js index e0417bf3..ce6ee92a 100644 --- a/src/renderer/core/share/player.js +++ b/src/renderer/core/share/player.js @@ -7,6 +7,7 @@ export const musicInfo = window.musicInfo = reactive({ lrc: null, tlrc: null, lxlrc: null, + rawlrc: null, url: null, name: '', singer: '', diff --git a/src/renderer/core/useApp/usePlayer/usePlayer.js b/src/renderer/core/useApp/usePlayer/usePlayer.js index 452deeda..cb12dbc5 100644 --- a/src/renderer/core/useApp/usePlayer/usePlayer.js +++ b/src/renderer/core/useApp/usePlayer/usePlayer.js @@ -135,7 +135,7 @@ export default ({ setting }) => { } } const setLrc = (targetSong) => { - getLrc(targetSong).then(({ lyric, tlyric, lxlyric }) => { + getLrc(targetSong).then(({ lyric, tlyric, lxlyric, rawInfo }) => { if (targetSong.songmid !== musicInfo.songmid) return return ( setting.value.player.isS2t @@ -150,6 +150,7 @@ export default ({ setting }) => { lrc: lyric, tlrc: tlyric, lxlrc: lxlyric, + rawlrc: rawInfo.lyric, }) }) }).catch((err) => { @@ -213,6 +214,7 @@ export default ({ setting }) => { lrc: null, tlrc: null, lxlrc: null, + rawlrc: null, url: null, name: '', singer: '', diff --git a/src/renderer/store/modules/player.js b/src/renderer/store/modules/player.js index 0aa7a89f..ed904150 100644 --- a/src/renderer/store/modules/player.js +++ b/src/renderer/store/modules/player.js @@ -4,6 +4,7 @@ import { getRandom, checkPath, getLyric as getStoreLyric, + getLyricRaw as getStoreLyricRaw, setLyric, setMusicUrl, getMusicUrl as getStoreMusicUrl, @@ -177,6 +178,14 @@ const getLyric = function(musicInfo, retryedSource = [], originMusic) { }) } +const buildLyricInfo = async(lyricInfo, musicInfo) => { + const lyricRawInfo = await getStoreLyricRaw(musicInfo) + return { + ...lyricInfo, + rawInfo: lyricRawInfo, + } +} + // getters const getters = { @@ -231,16 +240,16 @@ const actions = { case 'kw': break default: - return lrcInfo + return buildLyricInfo(lrcInfo, musicInfo) } - } else return lrcInfo + } else return buildLyricInfo(lrcInfo, musicInfo) } // lrcRequest = music[musicInfo.source].getLyric(musicInfo) return getLyric.call(this, musicInfo).then(({ lyric, tlyric, lxlyric }) => { // lrcRequest = null commit('setLrc', { musicInfo, lyric, tlyric, lxlyric }) - return { lyric, tlyric, lxlyric } + return buildLyricInfo({ lyric, tlyric, lxlyric }, musicInfo) }).catch(err => { // lrcRequest = null return Promise.reject(err) diff --git a/src/renderer/utils/index.js b/src/renderer/utils/index.js index 65af9a29..b5f38727 100644 --- a/src/renderer/utils/index.js +++ b/src/renderer/utils/index.js @@ -513,6 +513,7 @@ export const parseUrlParams = str => { } export const getLyric = musicInfo => rendererInvoke(NAMES.mainWindow.get_lyric, `${musicInfo.source}_${musicInfo.songmid}`) +export const getLyricRaw = musicInfo => rendererInvoke(NAMES.mainWindow.get_lyric_raw, `${musicInfo.source}_${musicInfo.songmid}`) export const setLyric = (musicInfo, { lyric, tlyric, lxlyric }) => rendererSend(NAMES.mainWindow.save_lyric_raw, { id: `${musicInfo.source}_${musicInfo.songmid}`, lyrics: { lyric, tlyric, lxlyric },