js 解析lrc文件(歌词)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: js 解析lrc文件(歌词)

1. 下载lrc文件

通过以下链接,可以搜索下载相关歌曲的lrc歌词文件

https://www.1ting.com/geci93979.html

2. 提取lrc文件的内容

用记事本打开下载的lrc文件,全选复制到js文件中

let lrc = 
`[00:01.59]不再犹豫
[00:03.91]作词:小美 作曲:黄家驹
[00:06.46]演唱:Beyond
[00:08.55]
[00:29.48]无聊望见了犹豫 
[00:32.87]达到理想不太易
[00:36.44]即使有信心 
[00:38.58]斗志却抑止
[00:43.61]谁人定我去或留 
[00:47.31]定我心中的宇宙
[00:50.83]只想靠两手向理想挥手
[00:56.88]
[00:58.15]问句天几高心中志比天更高
[01:05.11]自信打不死的心态活到老
[01:11.37]
[01:11.90]OH… 我有我心底故事
[01:19.41]亲手写上每段 
[01:21.57]得失乐与悲与梦儿
[01:26.18]OH… 纵有创伤不退避
[01:33.77]梦想有日达成 
[01:35.90]找到心底梦想的世界
[01:40.01]终可见
[01:43.83]
[02:09.64]谁人没试过犹豫 
[02:13.28]达到理想不太易
[02:16.85]即使有信心 
[02:18.91]斗志却抑止
[02:23.96]谁人定我去或留 
[02:27.68]定我心中的宇宙
[02:31.28]只想靠两手向理想挥手
[02:36.83]
[02:38.41]问句天几高 
[02:40.06]心中志比天更高
[02:45.57]自信打不死的心态活到老
[02:51.53]
[02:52.34]OH… 我有我心底故事
[02:59.91]亲手写上每段 
[03:02.05]得失乐与悲与梦儿
[03:06.66]OH… 纵有创伤不退避
[03:14.07]梦想有日达成 
[03:16.35]找到心底梦想的世界
[03:20.45]终可见
[03:24.04]
[03:25.06]OH… 亲手写上每段 
[03:30.64]得失乐与悲与梦儿
[03:36.31]
[03:39.07]OH… 梦想有日达成 
[03:45.05]找到心底梦想的世界
[03:49.60]终可见
[03:52.99]`;

3. 编写lrc解析函数parseLyric()

function parseLyric(lyric) {
  const lrcObj = {
    ti: "",
    ar: "",
    al: "",
    by: "",
    lrc: [],
  };

  /*
            [ar:艺人名]
            [ti:曲名]
            [al:专辑名]
            [by:编者(指编辑LRC歌词的人)]
            [offset:时间补偿值] 其单位是毫秒,正值表示整体提前,负值相反。这是用于总体调整显示快慢的。
        */

  const lrcArr = lyric
    .split("\n")
    .filter(function (value) {
      // 1.通过回车去分割歌词每一行,遍历数组,去除空行空格
      return value.trim() !== "";
    })
    .map(function (value) {
      // 2.解析歌词
      const line = parseLyricLine(value.trim());
      // console.log(line);
      if (line.type === "lyric") {
        lrcObj.lrc.push(line.data);
      } else {
        lrcObj[line.type] = line.data;
      }
      return value.trim();
    });

  function parseLyricLine(line) {
    const tiArAlByExp = /^\[(ti|ar|al|by):(.*)\]$/;
    const lyricExp = /^\[(\d{2}):(\d{2}).(\d{2})\](.*)/;
    let result;
    if ((result = line.match(tiArAlByExp)) !== null) {
      return {
        type: result[1],
        data: result[2],
      };
    } else if ((result = line.match(lyricExp)) !== null) {
      return {
        type: "lyric",
        data: {
          time: {
            m: result[1],
            s: result[2],
            ms: result[3],
          },
          lyric: result[4].trim(),
        },
      };
    }
  }

  return lrcObj;
}

4. 调用lrc解析函数parseLyric()进行解析

let result = parseLyric(lrc);
 

最终 result 的值为一个对象,内容如下:

{
    "ti": "",
    "ar": "",
    "al": "",
    "by": "",
    "lrc": [
        {
            "time": {
                "m": "00",
                "s": "01",
                "ms": "59"
            },
            "lyric": "不再犹豫"
        },
        {
            "time": {
                "m": "00",
                "s": "03",
                "ms": "91"
            },
            "lyric": "作词:小美 作曲:黄家驹"
        },
        {
            "time": {
                "m": "00",
                "s": "06",
                "ms": "46"
            },
            "lyric": "演唱:Beyond"
        },
        {
            "time": {
                "m": "00",
                "s": "08",
                "ms": "55"
            },
            "lyric": ""
        },
        {
            "time": {
                "m": "00",
                "s": "29",
                "ms": "48"
            },
            "lyric": "无聊望见了犹豫"
        },
        {
            "time": {
                "m": "00",
                "s": "32",
                "ms": "87"
            },
            "lyric": "达到理想不太易"
        },
        {
            "time": {
                "m": "00",
                "s": "36",
                "ms": "44"
            },
            "lyric": "即使有信心"
        },
        {
            "time": {
                "m": "00",
                "s": "38",
                "ms": "58"
            },
            "lyric": "斗志却抑止"
        },
        {
            "time": {
                "m": "00",
                "s": "43",
                "ms": "61"
            },
            "lyric": "谁人定我去或留"
        },
        {
            "time": {
                "m": "00",
                "s": "47",
                "ms": "31"
            },
            "lyric": "定我心中的宇宙"
        },
        {
            "time": {
                "m": "00",
                "s": "50",
                "ms": "83"
            },
            "lyric": "只想靠两手向理想挥手"
        },
        {
            "time": {
                "m": "00",
                "s": "56",
                "ms": "88"
            },
            "lyric": ""
        },
        {
            "time": {
                "m": "00",
                "s": "58",
                "ms": "15"
            },
            "lyric": "问句天几高心中志比天更高"
        },
        {
            "time": {
                "m": "01",
                "s": "05",
                "ms": "11"
            },
            "lyric": "自信打不死的心态活到老"
        },
        {
            "time": {
                "m": "01",
                "s": "11",
                "ms": "37"
            },
            "lyric": ""
        },
        {
            "time": {
                "m": "01",
                "s": "11",
                "ms": "90"
            },
            "lyric": "OH… 我有我心底故事"
        },
        {
            "time": {
                "m": "01",
                "s": "19",
                "ms": "41"
            },
            "lyric": "亲手写上每段"
        },
        {
            "time": {
                "m": "01",
                "s": "21",
                "ms": "57"
            },
            "lyric": "得失乐与悲与梦儿"
        },
        {
            "time": {
                "m": "01",
                "s": "26",
                "ms": "18"
            },
            "lyric": "OH… 纵有创伤不退避"
        },
        {
            "time": {
                "m": "01",
                "s": "33",
                "ms": "77"
            },
            "lyric": "梦想有日达成"
        },
        {
            "time": {
                "m": "01",
                "s": "35",
                "ms": "90"
            },
            "lyric": "找到心底梦想的世界"
        },
        {
            "time": {
                "m": "01",
                "s": "40",
                "ms": "01"
            },
            "lyric": "终可见"
        },
        {
            "time": {
                "m": "01",
                "s": "43",
                "ms": "83"
            },
            "lyric": ""
        },
        {
            "time": {
                "m": "02",
                "s": "09",
                "ms": "64"
            },
            "lyric": "谁人没试过犹豫"
        },
        {
            "time": {
                "m": "02",
                "s": "13",
                "ms": "28"
            },
            "lyric": "达到理想不太易"
        },
        {
            "time": {
                "m": "02",
                "s": "16",
                "ms": "85"
            },
            "lyric": "即使有信心"
        },
        {
            "time": {
                "m": "02",
                "s": "18",
                "ms": "91"
            },
            "lyric": "斗志却抑止"
        },
        {
            "time": {
                "m": "02",
                "s": "23",
                "ms": "96"
            },
            "lyric": "谁人定我去或留"
        },
        {
            "time": {
                "m": "02",
                "s": "27",
                "ms": "68"
            },
            "lyric": "定我心中的宇宙"
        },
        {
            "time": {
                "m": "02",
                "s": "31",
                "ms": "28"
            },
            "lyric": "只想靠两手向理想挥手"
        },
        {
            "time": {
                "m": "02",
                "s": "36",
                "ms": "83"
            },
            "lyric": ""
        },
        {
            "time": {
                "m": "02",
                "s": "38",
                "ms": "41"
            },
            "lyric": "问句天几高"
        },
        {
            "time": {
                "m": "02",
                "s": "40",
                "ms": "06"
            },
            "lyric": "心中志比天更高"
        },
        {
            "time": {
                "m": "02",
                "s": "45",
                "ms": "57"
            },
            "lyric": "自信打不死的心态活到老"
        },
        {
            "time": {
                "m": "02",
                "s": "51",
                "ms": "53"
            },
            "lyric": ""
        },
        {
            "time": {
                "m": "02",
                "s": "52",
                "ms": "34"
            },
            "lyric": "OH… 我有我心底故事"
        },
        {
            "time": {
                "m": "02",
                "s": "59",
                "ms": "91"
            },
            "lyric": "亲手写上每段"
        },
        {
            "time": {
                "m": "03",
                "s": "02",
                "ms": "05"
            },
            "lyric": "得失乐与悲与梦儿"
        },
        {
            "time": {
                "m": "03",
                "s": "06",
                "ms": "66"
            },
            "lyric": "OH… 纵有创伤不退避"
        },
        {
            "time": {
                "m": "03",
                "s": "14",
                "ms": "07"
            },
            "lyric": "梦想有日达成"
        },
        {
            "time": {
                "m": "03",
                "s": "16",
                "ms": "35"
            },
            "lyric": "找到心底梦想的世界"
        },
        {
            "time": {
                "m": "03",
                "s": "20",
                "ms": "45"
            },
            "lyric": "终可见"
        },
        {
            "time": {
                "m": "03",
                "s": "24",
                "ms": "04"
            },
            "lyric": ""
        },
        {
            "time": {
                "m": "03",
                "s": "25",
                "ms": "06"
            },
            "lyric": "OH… 亲手写上每段"
        },
        {
            "time": {
                "m": "03",
                "s": "30",
                "ms": "64"
            },
            "lyric": "得失乐与悲与梦儿"
        },
        {
            "time": {
                "m": "03",
                "s": "36",
                "ms": "31"
            },
            "lyric": ""
        },
        {
            "time": {
                "m": "03",
                "s": "39",
                "ms": "07"
            },
            "lyric": "OH… 梦想有日达成"
        },
        {
            "time": {
                "m": "03",
                "s": "45",
                "ms": "05"
            },
            "lyric": "找到心底梦想的世界"
        },
        {
            "time": {
                "m": "03",
                "s": "49",
                "ms": "60"
            },
            "lyric": "终可见"
        },
        {
            "time": {
                "m": "03",
                "s": "52",
                "ms": "99"
            },
            "lyric": ""
        }
    ]
}
目录
相关文章
|
21天前
|
JavaScript
js 解析 byte数组 成字符串
js 解析 byte数组 成字符串
|
8天前
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
15 2
前端JS读取文件内容并展示到页面上
|
14天前
云解析分享文件
这座建筑结合了现代设计与和谐的自然景观。大面积的玻璃窗让居住者可以充分享受美景和阳光,同时保证了室内充足的自然光线。是体验宁静生活与自然之美的理想之地。图片展现了其优美的自然环境和现代建筑设计的完美融合。
38 6
云解析分享文件
|
5天前
|
JavaScript 前端开发 数据安全/隐私保护
混淆指定js文件
【9月更文挑战第26天】JavaScript 混淆旨在保护代码知识产权、减小文件体积和提高安全性。方法包括变量名和函数名混淆、代码压缩、控制流平坦化及字符串加密。常用工具如 UglifyJS 和 JScrambler 可实现这些功能。然而,混淆可能带来兼容性和调试困难等问题,需谨慎使用并确保法律合规。
|
7天前
|
移动开发 JavaScript 前端开发
js之操作文件| 12-5
js之操作文件| 12-5
|
19天前
|
JSON 前端开发 JavaScript
解析JSON文件
解析JSON文件
57 9
|
20天前
|
存储 JSON JavaScript
学习node.js十三,文件的上传于下载
学习node.js十三,文件的上传于下载
|
1月前
|
JavaScript 前端开发 API
Javaweb之javascript的BOM对象的详细解析
BOM为Web开发提供了强大的API,允许开发者与浏览器进行深入的交互。合理使用BOM中的对象和方法,可以极大地增强Web应用的功能性和用户体验。需要注意的是,BOM的某些特征可能会在不同浏览器中表现不一致,因此在开发过程中需要进行仔细的测试和兼容性处理。通过掌握BOM,开发者能够制作出更丰富、更动态、更交互性的JavaWeb应用。
17 1
|
1月前
|
自然语言处理 前端开发 JavaScript
Javaweb之javascript的详细解析
通过明确JavaScript的定位,掌握其核心概念和相关技术栈,在实现交互丰富的Web应用时,JavaScript就能够发挥它不可替代的作用。随着前后端分离趋势的推进,JavaScript在现代 Web 开发中变得更加重要,不仅限于传统的 JavaWeb 应用,而是广泛应用于各种类型的前端项目。
15 0
|
2月前
|
开发者 图形学 C#
深度解密:Unity游戏开发中的动画艺术——Mecanim状态机如何让游戏角色栩栩如生:从基础设置到高级状态切换的全面指南,助你打造流畅自然的游戏动画体验
【8月更文挑战第31天】Unity动画系统是游戏开发的关键部分,尤其适用于复杂角色动画。本文通过具体案例讲解Mecanim动画状态机的使用方法及原理。我们创建一个游戏角色并设计行走、奔跑和攻击动画,详细介绍动画状态机设置及脚本控制。首先导入动画资源并添加Animator组件,然后创建Animator Controller并设置状态间的转换条件。通过编写C#脚本(如PlayerMovement)控制动画状态切换,实现基于玩家输入的动画过渡。此方法不仅适用于游戏角色,还可用于任何需动态动画响应的对象,增强游戏的真实感与互动性。
58 0

推荐镜像

更多
下一篇
无影云桌面