写个处理LRC的代码段凑个热闹
请各位指教
let processLRC = (lyricTxt) =>
// 去掉头尾的空格并分行
var lines = lyricTxt.replace(/(^\s*)|(\s*$)/g, "").split(/\r|\n|\r\n/);
var lrcs = new Array();
// 依次处理每一行
for (let index = 0; index < lines.length; index++) {
// 先把时间数据分离出来
let chkTime = lines.match(/\[\d{1,2}:\d{2}.\d{1,3}\]|\[\d{1,2}:\d{2}\]/g );
if(chkTime) { // 如果有时间数据就是有效的行
tIdx = lines.lastIndexOf(']');// 取得该行的歌词起始位置
if(tIdx>0) lrcTxt = lines.substr(tIdx+1);// 取得该行的歌词
for(m = 0; m < chkTime.length; m++) {// 对每个时刻数据
ta = chkTime.substr(1).replace(']','').split(/:/);// 分离 分、秒及百分秒(或毫秒)
_t = (+ta) * 60 + (+ta);
// 加入集合中
lrcs.push({seconds:+_t.toFixed(2), words:lrcTxt, dur:0});
}
}
}
// 排序
lrcs.sort(function(a, b){return (a.seconds - b.seconds);});
// 准备计算平均的持续时间
let avgInterval= 0;
for(n = 0; n < lrcs.length - 1; n++) {
// 后一行起始时刻 - 当前行起始时刻
lrcs.dur = +(lrcs.seconds - lrcs.seconds).toFixed(2);
// 把每行的持续时间累加起来
avgInterval += (+lrcs.dur);
}
// 计算得平均的持续时间
avgInterval /= (lrcs.length - 1);
// 最后一行的持续时间取平均的持续时间
lrcs.dur = +avgInterval.toFixed(2);
for(n = 0; n < lrcs.length - 1; n++) {
// 若某行的持续时间大于平均持续时间则置为平均持续时间
lrcs.dur = lrcs.dur > avgInterval?lrcs.dur:lrcs.dur
}
//console.log(lrcs)
return lrcs; // 返回处理好的lrc歌词数据集合。
}
虽然不懂,但也要加分鼓励{:4_199:} 路过,点赞 樵歌 发表于 2023-2-21 10:34
虽然不懂,但也要加分鼓励
谢谢您的支持 庶民 发表于 2023-2-21 10:41
路过,点赞
谢谢您的支持 使用对象存储lrc数据,方法很好 马黑黑 发表于 2023-2-21 12:56
使用对象存储lrc数据,方法很好
谢谢点评!
其实改成[ , , ]也可以,但时间久了容易忘记分别是什么了。
let processLRC = (lyricTxt) => {
var lines = lyricTxt.replace(/(^\s*)|(\s*$)/g, "").split(/\r|\n|\r\n/);
var lrcs = new Array();
for (let index = 0; index < lines.length; index++) {
let chkTime = lines.match(/\[\d{1,2}:\d{2}.\d{1,3}\]|\[\d{1,2}:\d{2}\]/g );
if(chkTime) {
tIdx = lines.lastIndexOf(']');
if(tIdx>0) lrcTxt = lines.substr(tIdx+1);
for(m = 0; m < chkTime.length; m++) {
ta = chkTime.substr(1).replace(']','').split(/:/);
_t = (+ta) * 60 + (+ta);
lrcs.push([+_t.toFixed(2), lrcTxt, 0]);
}
}
}
lrcs.sort(function(a, b){return (a - b);});
let avgInterval= 0;
for(n = 0; n < lrcs.length - 1; n++) {
lrcs = +(lrcs - lrcs).toFixed(2);
avgInterval += (+lrcs);
}
avgInterval /= (lrcs.length - 1);
lrcs = +avgInterval.toFixed(2);
for(n = 0; n < lrcs.length - 1; n++) {
lrcs = lrcs > avgInterval?lrcs:lrcs
}
//console.log(lrcs)
return lrcs;
} 起个网名好难 发表于 2023-2-21 10:43
谢谢您的支持
不必客气哈{:4_190:} 樵歌 发表于 2023-2-21 17:39
不必客气哈
起个网名好难 发表于 2023-2-21 13:06
谢谢点评!
其实改成[ , , ]也可以,但时间久了容易忘记分别是什么了。
对。对象拥有键值对 马黑黑 发表于 2023-2-21 18:14
对。对象拥有键值对
时间一长自己写的也不明白为什么了{:5_102:} 起个网名好难 发表于 2023-2-21 18:29
时间一长自己写的也不明白为什么了
这种现象经常会有 马黑黑 发表于 2023-2-21 18:32
这种现象经常会有
做项目的代码注释比代码还多 我也不懂,但觉得能自己写代码的都好牛啊。点赞{:4_199:} 起个网名好难 发表于 2023-2-21 19:04
做项目的代码注释比代码还多
注释很重要,尽管我个人不太习惯做 马黑黑 发表于 2023-2-21 19:22
注释很重要,尽管我个人不太习惯做
尽管注释是个好习惯,但不是工作的马虎就马虎了。 起个网名好难 发表于 2023-2-21 19:30
尽管注释是个好习惯,但不是工作的马虎就马虎了。
个人都有局限,木有办法呢 红影 发表于 2023-2-21 19:10
我也不懂,但觉得能自己写代码的都好牛啊。点赞
其实就是先计划好做一件事分几步,然后用代码去实现每个步骤。 我就飘过。。。。{:4_170:}