起个网名好难 发表于 2023-2-21 09:31

写个处理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歌词数据集合。
}

樵歌 发表于 2023-2-21 10:34

虽然不懂,但也要加分鼓励{:4_199:}

庶民 发表于 2023-2-21 10:41

路过,点赞

起个网名好难 发表于 2023-2-21 10:43

樵歌 发表于 2023-2-21 10:34
虽然不懂,但也要加分鼓励

谢谢您的支持

起个网名好难 发表于 2023-2-21 10:44

庶民 发表于 2023-2-21 10:41
路过,点赞

谢谢您的支持

马黑黑 发表于 2023-2-21 12:56

使用对象存储lrc数据,方法很好

起个网名好难 发表于 2023-2-21 13:06

马黑黑 发表于 2023-2-21 12:56
使用对象存储lrc数据,方法很好

谢谢点评!
其实改成[ , , ]也可以,但时间久了容易忘记分别是什么了。

起个网名好难 发表于 2023-2-21 17:08



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 17:39

起个网名好难 发表于 2023-2-21 10:43
谢谢您的支持

不必客气哈{:4_190:}

起个网名好难 发表于 2023-2-21 17:40

樵歌 发表于 2023-2-21 17:39
不必客气哈



马黑黑 发表于 2023-2-21 18:14

起个网名好难 发表于 2023-2-21 13:06
谢谢点评!
其实改成[ , , ]也可以,但时间久了容易忘记分别是什么了。

对。对象拥有键值对

起个网名好难 发表于 2023-2-21 18:29

马黑黑 发表于 2023-2-21 18:14
对。对象拥有键值对

时间一长自己写的也不明白为什么了{:5_102:}

马黑黑 发表于 2023-2-21 18:32

起个网名好难 发表于 2023-2-21 18:29
时间一长自己写的也不明白为什么了

这种现象经常会有

起个网名好难 发表于 2023-2-21 19:04

马黑黑 发表于 2023-2-21 18:32
这种现象经常会有

做项目的代码注释比代码还多

红影 发表于 2023-2-21 19:10

我也不懂,但觉得能自己写代码的都好牛啊。点赞{:4_199:}

马黑黑 发表于 2023-2-21 19:22

起个网名好难 发表于 2023-2-21 19:04
做项目的代码注释比代码还多

注释很重要,尽管我个人不太习惯做

起个网名好难 发表于 2023-2-21 19:30

马黑黑 发表于 2023-2-21 19:22
注释很重要,尽管我个人不太习惯做

尽管注释是个好习惯,但不是工作的马虎就马虎了。

马黑黑 发表于 2023-2-21 19:30

起个网名好难 发表于 2023-2-21 19:30
尽管注释是个好习惯,但不是工作的马虎就马虎了。

个人都有局限,木有办法呢

起个网名好难 发表于 2023-2-21 19:32

红影 发表于 2023-2-21 19:10
我也不懂,但觉得能自己写代码的都好牛啊。点赞

其实就是先计划好做一件事分几步,然后用代码去实现每个步骤。

小辣椒 发表于 2023-2-21 19:48

我就飘过。。。。{:4_170:}
页: [1] 2 3 4
查看完整版本: 写个处理LRC的代码段凑个热闹