fix: 修复歌词解析中毫秒时间的处理逻辑
This commit is contained in:
@@ -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: [],
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user