首先要获取带有时间轴的歌词(如下图所示)
正则匹配时间的表达式:
var reg = /\[(\d{2})\:(\d{2})\.(\d{3})\]\s*(.+)/;
整体代码如下:
//加载fs模块 var fs = require('fs'); // 读取歌词文件 fs.readFile('./lrc.txt',function(err,data){ if(err){ return console.log("读取歌词文件失败"); } data = data.toString(); var lines = data.split('\n'); // 遍历所以行,通过正则匹配里面的时间,解析出毫秒 // 需要里面的时间 和里面的内容 console.log(lines); console.log(lines.length); var reg = /\[(\d{2})\:(\d{2})\.(\d{3})\]\s*(.+)/; for(let i = 0;i < lines.length;i++){ (function(index){ var line = lines[index] // console.log(line); var matches = reg.exec(line); // console.log(matches); if(matches){ // 获取分 var m = parseFloat(matches[1]); // console.log(m); // 获取秒 var s= parseFloat(matches[2]); // console.log(s); // 获取毫秒 var ms = parseFloat(matches[3]); // 获取定时器中要输出的内容 var content = matches[4]; // 将分+秒+毫秒转换为毫秒 var time = m * 60*1000 + s*1000 + ms; // 使用定时器,让每行内容在指定时间输出 setTimeout(function(){ console.log(content); },time) } })(i) } })
最后实现歌词逐个出现的功能