马黑黑 发表于 2022-6-24 19:25

花潮LRC在线开发手记

委托内网帮忙测试花潮LRC在线,收集到:

一、1个bug

不能完美适用于多种lrc变种格式,例如, mm:ss:ff 和 mm.ss.ff 以及更为古怪的其他变种,程序对此类变种格式的lrc歌词获取的时间不够友好。

二、1个建议

转换和检测这两种工作模式应该可以接受lrc时间偏移值。

针对问题,即解析变种lrc,我重新审阅了转换函数后,决定重新构建匹配lrc时间的正则表达式,令其提升匹配lrc时间格式的能力。重新构建的正则可以是这样:

let re = /\d+[\.:]\d+([\.:]\d+)?/g;

彩色部分即为新构建的正则表达式,它的工作原理解释如下:

首先是红色的,\d+[\.:] ,其中,\d 表示数字,\d+ 表示的是一个或多个数字,其后是 [\.:] ,表示出现一次 . 或者 : 中的任意一个。这是匹配 mm:(.) ;

其次是蓝色的,\d+ ,匹配的是 ss 部分,表示出现一个或多个数字。有些格式到 ss 就没了,所以这一部分只需要单独匹配 ss ;

第三,绿色部分,([\.:]\d+)? ,匹配的是 ff 部分。ff 部分不一定存在,所以用括号将整体正则包围起来,后面给一个问号,问号的意思是 0 或 1 次匹配,说的是括号里的正则表达式单位若出现0次或1次,都匹配,0次匹配时获取到的 ff 内容是 null(空值),1次匹配得到真实内容。至于括号里的正则,意思是,. 或 : 出现一次,\d+ 表示数字出现一次或多次。

新构建的正则,将更多地关注lrc宽松时间格式的存在,而抛弃原先表达式的整个时间信息内外结构(即 的形式)。然后在歌词处理上再去掉多余的如 [ 和 ] 等这类字符即可。

针对建议,我仔细思量后,觉得转换和检测模式的确也应该引入偏移量,并想到了实现方式:

创建一个数组变量,用于装载三种工作模式的 offset 值,制作时 offset 默认为 0.2,其它模式默认值都是 0。转换和同步试听模式的偏移值,仅在用户做了设定时 offset 才会发挥作用,但它一直会以默认值 0 参与相关运算。

以上仅是设想,尚未动手。

红影 发表于 2022-6-24 19:59

精益求精,黑黑太棒了{:4_199:}

红影 发表于 2022-6-24 20:01

考虑那么多变种格式,工作量会增加很多啊。开发一个程序真的太不容易了{:4_199:}

马黑黑 发表于 2022-6-24 20:01

红影 发表于 2022-6-24 19:59
精益求精,黑黑太棒了

不是啊,发现问题就要解决,这是基本要求

马黑黑 发表于 2022-6-24 20:02

红影 发表于 2022-6-24 20:01
考虑那么多变种格式,工作量会增加很多啊。开发一个程序真的太不容易了

从来如此的,无一例外。不过我想,开始设计正则,我太拘泥于完整的时间结构,没有仔细研究过lrc的宽松格式

红影 发表于 2022-6-24 20:03

转换可以加偏移量,检测就不必了吧,大不了重新转换或制作呗,反正制作里已经给出偏移了啊{:4_173:}

红影 发表于 2022-6-24 20:03

黑黑真认真,辛苦了{:4_190:}

马黑黑 发表于 2022-6-24 20:04

红影 发表于 2022-6-24 20:03
转换可以加偏移量,检测就不必了吧,大不了重新转换或制作呗,反正制作里已经给出偏移了啊

默认为0,加了也无妨

樵歌 发表于 2022-6-24 20:49

在修炼神识呵。

马黑黑 发表于 2022-6-24 20:50

樵歌 发表于 2022-6-24 20:49
在修炼神识呵。

还不如说是在补锅

樵歌 发表于 2022-6-24 20:52

马黑黑 发表于 2022-6-24 20:50
还不如说是在补锅

补天,帮女娲{:4_173:}

马黑黑 发表于 2022-6-24 21:09

樵歌 发表于 2022-6-24 20:52
补天,帮女娲

女娲都是单干的

小辣椒 发表于 2022-6-24 21:13

感觉黑黑要完善一个程序,付出的时间真的不可估量,就小辣椒看看这些文字的时间都感觉要不少时间。黑黑辛苦了,也是更加佩服你了{:4_178:}

红影 发表于 2022-6-24 21:13

马黑黑 发表于 2022-6-24 20:01
不是啊,发现问题就要解决,这是基本要求

我觉得已经很好了呢{:4_173:}

马黑黑 发表于 2022-6-24 21:14

小辣椒 发表于 2022-6-24 21:13
感觉黑黑要完善一个程序,付出的时间真的不可估量,就小辣椒看看这些文字的时间都感觉要不少时间。黑黑辛苦 ...

做这个嘛,我还是挺不紧不慢的,没花多少时间,用零碎的时间想想、做做

红影 发表于 2022-6-24 21:14

马黑黑 发表于 2022-6-24 20:02
从来如此的,无一例外。不过我想,开始设计正则,我太拘泥于完整的时间结构,没有仔细研究过lrc的宽松格 ...

宽松格式五花八门,都兼顾的话就太不容易了。

马黑黑 发表于 2022-6-24 21:15

红影 发表于 2022-6-24 21:14
宽松格式五花八门,都兼顾的话就太不容易了。

虽然宽松,但还是规矩明晰的

红影 发表于 2022-6-24 21:15

马黑黑 发表于 2022-6-24 20:04
默认为0,加了也无妨

嗯嗯,简单的设置,弄也就弄了,困难的就太费工夫了。

小辣椒 发表于 2022-6-24 21:16

马黑黑 发表于 2022-6-24 21:14
做这个嘛,我还是挺不紧不慢的,没花多少时间,用零碎的时间想想、做做

我黑黑的文字帖基本没有这么看的,感觉最重要的精华部分都漏看了。

马黑黑 发表于 2022-6-24 21:17

红影 发表于 2022-6-24 21:13
我觉得已经很好了呢

一般来说,多数情况下,lrc大致格式是我之前处理的那些,但真有变异的格式。

再怎么变异,也有规矩,必须是 mm ss (ff) 这样的构成,中间的符号有所不同,但也只是 . 和 :这两样,我要处理的就是这些,然后程序的格式兼容性大大提升
页: [1] 2 3 4 5
查看完整版本: 花潮LRC在线开发手记