JavaScript脚本对LRC歌词折叠展开
作者:秋了秋 发表时间:2017年06月20日
使用场景:不同播放器对lrc歌词格式支持程度不一样,尤其是网页播放器,很多不支持不同时间唱同一句歌词,所有时间会折叠成一行的格式,这种歌词在网上很常见,然而有的时候我们不能使用折叠的歌词,那么我们就要一行一行的去拆开,放到对应的时间线。手动去拆解是一件很麻烦的事情,但我之前一直这么搞。。。现在写了个脚本一劳永逸,不仅能把折叠的歌词展开,还能反过来把展开的歌词折叠起来,还能规范歌词格式。解放了双手,屡试不爽。
在线歌词转换:
脚本代码:
//把歌词展开函数,参数传完整的lrc歌词字符串,需要换行 function unfoldLrc(lrc){ var lrcArr = lrc.split("\n"); var lrcHead = []; var lrcContent = []; lrcArr.forEach(function(n,i){ var times = n.match(/\[(.*?)\]/g); if(times){ var leng = times.length; var index = n.indexOf(times[leng-1]) var txt = n.substring(index).split("]")[1]; times.forEach(function(item,index){ var time = item.match(/\[(\d{2}[\:\.]\d{2}[\:\.]\d{2})\]/); if(time){ var hsm = time[1].split(/[\:\.]/); var obj = { time:hsm[0]+hsm[1]+hsm[2], lrc:"["+hsm[0]+":"+hsm[1]+":"+hsm[2]+"]"+txt }; lrcContent.push(obj); }else{ lrcHead.push(n); } }); } }); lrcContent.sort(function(time1,time2){ return (time1.time - time2.time) }); lrcContent.forEach(function(n,i){ lrcContent[i] = n.lrc; }); checkLrcHead(lrcHead); var allLrc = lrcHead.concat(lrcContent); return allLrc.join("\n"); } //处理歌词头部信息,检查完整度,保证歌词标准格式 function checkLrcHead(head){ var obj = {}; head.forEach(function(n,i){ var key = n.match(/\[(\w+)\:/)[1]; var value = n.match(/\:(.*?)\]/)[1]; if(key){ obj[key] = value; } }); var keys = Object.keys(obj); if(keys.indexOf("ti") == -1){ obj["ti"] = "Unknown Song"; } if(keys.indexOf("ar") == -1){ obj["ar"] = "秋叶"; } if(keys.indexOf("al") == -1){ obj["al"] = "戒不掉的心跳"; } if(keys.indexOf("by") == -1){ obj["by"] = "秋叶博客"; } head.length = 0; var sortArr = ["ti","ar","al","by"]; sortArr.forEach(function(n,i){ head.push(["["+n+":"+obj[n]+"]"]); }); return head; } //把歌词折叠,参数传完整的lrc歌词字符串,需要换行 function foldLrc(lrc){ var lrcArr = lrc.split("\n"); var lrcObj = {}; var lrcHead = []; var newLrc = []; lrcArr.forEach(function(n,i){ var times = n.match(/\[(.*?)\]/g); if(times){ var leng = times.length; var index = n.indexOf(times[leng-1]) var txt = n.substring(index).split("]")[1]; times.forEach(function(item,index){ var time = item.match(/\[(\d{2}[\:\.]\d{2}[\:\.]\d{2})\]/); if(time){ var hsm = time[1].split(/[\:\.]/); if(!lrcObj[txt]){ lrcObj[txt] = [time[0]]; }else{ lrcObj[txt].push(time[0]); } }else{ lrcHead.push(n); } }); } }); checkLrcHead(lrcHead); var allLrc = lrcHead.concat(newLrc); for(var i in lrcObj){ allLrc.push(lrcObj[i].join("")+i); } return allLrc.join("\n"); }
2
文章作者: “秋了秋”个人博客,本站鼓励原创。
转载请注明本文地址:http://netblog.cn/blog/483.html