花潮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 参与相关运算。
以上仅是设想,尚未动手。
精益求精,黑黑太棒了{:4_199:} 考虑那么多变种格式,工作量会增加很多啊。开发一个程序真的太不容易了{:4_199:} 红影 发表于 2022-6-24 19:59
精益求精,黑黑太棒了
不是啊,发现问题就要解决,这是基本要求 红影 发表于 2022-6-24 20:01
考虑那么多变种格式,工作量会增加很多啊。开发一个程序真的太不容易了
从来如此的,无一例外。不过我想,开始设计正则,我太拘泥于完整的时间结构,没有仔细研究过lrc的宽松格式 转换可以加偏移量,检测就不必了吧,大不了重新转换或制作呗,反正制作里已经给出偏移了啊{:4_173:} 黑黑真认真,辛苦了{:4_190:} 红影 发表于 2022-6-24 20:03
转换可以加偏移量,检测就不必了吧,大不了重新转换或制作呗,反正制作里已经给出偏移了啊
默认为0,加了也无妨 在修炼神识呵。 樵歌 发表于 2022-6-24 20:49
在修炼神识呵。
还不如说是在补锅 马黑黑 发表于 2022-6-24 20:50
还不如说是在补锅
补天,帮女娲{:4_173:} 樵歌 发表于 2022-6-24 20:52
补天,帮女娲
女娲都是单干的 感觉黑黑要完善一个程序,付出的时间真的不可估量,就小辣椒看看这些文字的时间都感觉要不少时间。黑黑辛苦了,也是更加佩服你了{:4_178:} 马黑黑 发表于 2022-6-24 20:01
不是啊,发现问题就要解决,这是基本要求
我觉得已经很好了呢{:4_173:} 小辣椒 发表于 2022-6-24 21:13
感觉黑黑要完善一个程序,付出的时间真的不可估量,就小辣椒看看这些文字的时间都感觉要不少时间。黑黑辛苦 ...
做这个嘛,我还是挺不紧不慢的,没花多少时间,用零碎的时间想想、做做 马黑黑 发表于 2022-6-24 20:02
从来如此的,无一例外。不过我想,开始设计正则,我太拘泥于完整的时间结构,没有仔细研究过lrc的宽松格 ...
宽松格式五花八门,都兼顾的话就太不容易了。 红影 发表于 2022-6-24 21:14
宽松格式五花八门,都兼顾的话就太不容易了。
虽然宽松,但还是规矩明晰的 马黑黑 发表于 2022-6-24 20:04
默认为0,加了也无妨
嗯嗯,简单的设置,弄也就弄了,困难的就太费工夫了。 马黑黑 发表于 2022-6-24 21:14
做这个嘛,我还是挺不紧不慢的,没花多少时间,用零碎的时间想想、做做
我黑黑的文字帖基本没有这么看的,感觉最重要的精华部分都漏看了。 红影 发表于 2022-6-24 21:13
我觉得已经很好了呢
一般来说,多数情况下,lrc大致格式是我之前处理的那些,但真有变异的格式。
再怎么变异,也有规矩,必须是 mm ss (ff) 这样的构成,中间的符号有所不同,但也只是 . 和 :这两样,我要处理的就是这些,然后程序的格式兼容性大大提升