fix: 修复歌词解析中毫秒时间的处理逻辑

This commit is contained in:
lyswhut
2026-07-06 20:56:58 +08:00
parent 75ba99d9d1
commit bbbbfeda12
@@ -2,6 +2,7 @@ import { getNow, TimeoutTools } from './utils'
const timeFieldExp = /^(?:\[[\d:.]+\])+/g const timeFieldExp = /^(?:\[[\d:.]+\])+/g
const timeExp = /\d{1,3}(:\d{1,3}){0,2}(?:\.\d{1,3})/g const timeExp = /\d{1,3}(:\d{1,3}){0,2}(?:\.\d{1,3})/g
const msTimeRxp = /\[\d{1,3}(:\d{1,3}){0,2}\.\d{3}]/
const tagRegMap = { const tagRegMap = {
title: 'ti', title: 'ti',
artist: 'ar', artist: 'ar',
@@ -82,6 +83,7 @@ export default class LinePlayer {
_initLines() { _initLines() {
this.lines = [] this.lines = []
const isMsTime = msTimeRxp.test(this.lyric)
const lines = this.lyric.split(/\r\n|\r|\n/) const lines = this.lyric.split(/\r\n|\r|\n/)
const linesMap = {} const linesMap = {}
for (let i = 0; i < lines.length; i++) { for (let i = 0; i < lines.length; i++) {
@@ -103,9 +105,10 @@ export default class LinePlayer {
if (timeArr.length > 3) continue if (timeArr.length > 3) continue
else if (timeArr.length < 3) for (let i = 3 - timeArr.length; i--;) timeArr.unshift('0') else if (timeArr.length < 3) for (let i = 3 - timeArr.length; i--;) timeArr.unshift('0')
if (timeArr[2].indexOf('.') > -1) timeArr.splice(2, 1, ...timeArr[2].split('.')) if (timeArr[2].indexOf('.') > -1) timeArr.splice(2, 1, ...timeArr[2].split('.'))
const msTime = timeArr[3] || '0'
linesMap[timeStr] = { linesMap[timeStr] = {
time: parseInt(timeArr[0]) * 60 * 60 * 1000 + parseInt(timeArr[1]) * 60 * 1000 + parseInt(timeArr[2]) * 1000 + parseInt(timeArr[3] || 0), time: parseInt(timeArr[0]) * 60 * 60 * 1000 + parseInt(timeArr[1]) * 60 * 1000 + parseInt(timeArr[2]) * 1000 + parseInt(isMsTime ? msTime : msTime.padEnd(3, '0')),
text, text,
extendedLyrics: [], extendedLyrics: [],
} }