修复歌词标签解析格式没有严格按照标准的问题(#2855)
This commit is contained in:
@@ -108,8 +108,8 @@ export const lrcTools = {
|
||||
getWordInfo(str, str2, prevWord) {
|
||||
const offset = parseInt(str)
|
||||
const offset2 = parseInt(str2)
|
||||
let startTime = Math.abs((offset + offset2) / (this.offset * 2))
|
||||
let endTime = Math.abs((offset - offset2) / (this.offset2 * 2)) + startTime
|
||||
let startTime = Math.trunc(Math.abs((offset + offset2) / (this.offset * 2)))
|
||||
let endTime = Math.trunc(Math.abs((offset - offset2) / (this.offset2 * 2)) + startTime)
|
||||
if (prevWord) {
|
||||
if (startTime < prevWord.endTime) {
|
||||
prevWord.endTime = startTime
|
||||
@@ -117,14 +117,14 @@ export const lrcTools = {
|
||||
prevWord.startTime = prevWord.endTime
|
||||
}
|
||||
|
||||
prevWord.newTimeStr = `<${prevWord.startTime},${prevWord.endTime - prevWord.startTime}>`
|
||||
prevWord.newTimeStr = `<${prevWord.startTime},${Math.trunc(prevWord.endTime - prevWord.startTime)}>`
|
||||
// console.log(prevWord)
|
||||
}
|
||||
}
|
||||
return {
|
||||
startTime,
|
||||
endTime,
|
||||
timeStr: `<${startTime},${endTime - startTime}>`,
|
||||
timeStr: `<${startTime},${Math.trunc(endTime - startTime)}>`,
|
||||
}
|
||||
},
|
||||
parseLine(line) {
|
||||
|
||||
@@ -21,7 +21,7 @@ const mrcTools = {
|
||||
|
||||
const startTime = parseInt(result[1])
|
||||
let time = startTime
|
||||
let ms = time % 1000
|
||||
let ms = (time % 1000).toString().padStart(3, '0')
|
||||
time /= 1000
|
||||
let m = parseInt(time / 60).toString().padStart(2, '0')
|
||||
time %= 60
|
||||
@@ -36,7 +36,7 @@ const mrcTools = {
|
||||
if (!times) continue
|
||||
times = times.map(time => {
|
||||
const result = /\((\d+),(\d+)\)/.exec(time)
|
||||
return `<${parseInt(result[1]) - startTime},${result[2]}>`
|
||||
return `<${Math.trunc(parseInt(result[1]) - startTime)},${result[2]}>`
|
||||
})
|
||||
const wordArr = words.split(this.rxps.wordTime)
|
||||
const newWords = times.map((time, index) => `${time}${wordArr[index]}`).join('')
|
||||
|
||||
@@ -22,12 +22,12 @@ const parseTools = {
|
||||
},
|
||||
msFormat(timeMs) {
|
||||
if (Number.isNaN(timeMs)) return ''
|
||||
let ms = timeMs % 1000
|
||||
let ms = (timeMs % 1000).toString().padStart(3, '0')
|
||||
timeMs /= 1000
|
||||
let m = parseInt(timeMs / 60).toString().padStart(2, '0')
|
||||
timeMs %= 60
|
||||
let s = parseInt(timeMs).toString().padStart(2, '0')
|
||||
return `[${m}:${s}.${String(ms).padStart(3, '0')}]`
|
||||
return `[${m}:${s}.${ms}]`
|
||||
},
|
||||
parseLyric(lrc) {
|
||||
lrc = lrc.trim()
|
||||
@@ -65,7 +65,7 @@ const parseTools = {
|
||||
if (!times) continue
|
||||
times = times.map(time => {
|
||||
const result = /\((\d+),(\d+)\)/.exec(time)
|
||||
return `<${Math.max(parseInt(result[1]) - startMsTime, 0)},${result[2]}>`
|
||||
return `<${Math.trunc(Math.max(parseInt(result[1]) - startMsTime, 0))},${result[2]}>`
|
||||
})
|
||||
const wordArr = words.split(this.rxps.wordTime)
|
||||
const newWords = times.map((time, index) => `${time}${wordArr[index]}`).join('')
|
||||
|
||||
@@ -60,10 +60,13 @@ const parseTools = {
|
||||
lineTime: /^\[(\d+),\d+\]/,
|
||||
wordTime: /\(\d+,\d+,\d+\)/,
|
||||
wordTimeAll: /(\(\d+,\d+,\d+\))/g,
|
||||
timeMs2: /\[\d+:\d+\.\d{2}]/,
|
||||
timeMs3: /\[\d+:\d+\.\d{3}]/,
|
||||
},
|
||||
msFormat(timeMs) {
|
||||
msFormat(timeMs, pad3 = true) {
|
||||
if (Number.isNaN(timeMs)) return ''
|
||||
let ms = timeMs % 1000
|
||||
let ms = (timeMs % 1000).toString().padStart(pad3 ? 3 : 2, '0')
|
||||
if (!pad3 && ms.length > 2) ms = ms.slice(0, 2)
|
||||
timeMs /= 1000
|
||||
let m = parseInt(timeMs / 60).toString().padStart(2, '0')
|
||||
timeMs %= 60
|
||||
@@ -97,7 +100,7 @@ const parseTools = {
|
||||
if (!times) continue
|
||||
times = times.map(time => {
|
||||
const result = /\((\d+),(\d+),\d+\)/.exec(time)
|
||||
return `<${Math.max(parseInt(result[1]) - startMsTime, 0)},${result[2]}>`
|
||||
return `<${Math.trunc(Math.max(parseInt(result[1]) - startMsTime, 0))},${result[2]}>`
|
||||
})
|
||||
const wordArr = words.split(this.rxps.wordTime)
|
||||
wordArr.shift()
|
||||
@@ -113,12 +116,13 @@ const parseTools = {
|
||||
str = str.trim()
|
||||
str = str.replace(/\r/g, '')
|
||||
if (!str) return null
|
||||
const isPad3 = this.rxps.timeMs3.test(str) || !this.rxps.timeMs2.test(str)
|
||||
const lines = str.split('\n')
|
||||
return lines.map(line => {
|
||||
if (!this.rxps.info.test(line)) return line
|
||||
try {
|
||||
const info = JSON.parse(line)
|
||||
const timeTag = this.msFormat(info.t)
|
||||
const timeTag = this.msFormat(info.t, isPad3)
|
||||
return timeTag ? `${timeTag}${info.c.map(t => t.tx).join('')}` : ''
|
||||
} catch {
|
||||
return ''
|
||||
|
||||
Reference in New Issue
Block a user