|
|
请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 马黑黑 于 2023-1-16 17:38 编辑
对lrc歌词的处理,我们的花潮LRC在线制作程序早已实现,但一般难以直观看到其转换lrc为花潮格式的原理。这里提供一个处理机制,因为应对的是标准的lrc歌词结构,这个机制非常简洁。
首先了解一下最常见的lrc格式,以网易云音乐在线歌词为例,把头尾去掉后,它长酱紫:
[00:14.70]朱红色的纽扣镶上你送我的钗\n[00:18.42]金玉口难开纵然你只为伊而改\n[00:22.20]游走在巷门外灯影盼我离开\n[00:26.04]躲开你眼神留我一个人去猜\n[00:29.67]今后的小说里会有我\n[00:33.45]被世俗推脱被年华错过\n[00:37.14]逃离这一时世的迷离\n[00:40.95]能否换你共度三生烟火
里面有很多 \n ,其实这是换行符,所以上面的lrc也可以写成酱紫:
[00:14.70]朱红色的纽扣镶上你送我的钗
[00:18.42]金玉口难开纵然你只为伊而改
[00:22.20]游走在巷门外灯影盼我离开
[00:26.04]躲开你眼神留我一个人去猜
[00:29.67]今后的小说里会有我
[00:33.45]被世俗推脱被年华错过
[00:37.14]逃离这一时世的迷离
[00:40.95]能否换你共度三生烟火
不论怎么写,分行还是用 \n 表示,我们都把它看成一个分行的字符串,把它放到一个字符串变量里:
let str = `
[00:14.70]朱红色的纽扣镶上你送我的钗
[00:18.42]金玉口难开纵然你只为伊而改
[00:22.20]游走在巷门外灯影盼我离开
[00:26.04]躲开你眼神留我一个人去猜
[00:29.67]今后的小说里会有我
[00:33.45]被世俗推脱被年华错过
[00:37.14]逃离这一时世的迷离
[00:40.95]能否换你共度三生烟火
`;
注意观察歌词里有没有反引号 ` ,如有,会发生冲突,把它转义 \` 或换成变得字符。
然后我们写一个小函数:
let foo = (str) => {
let reg = /\[(\d{2}:\d{2}.\d{2})\](.*)/g;
if(str.match(reg)) {
str = str.replace(reg,'$1,$2');
}
return str;
};
函数很简单:先构建一个正则,让它去匹配中括号内的时间和中括号外面的字符串,表达式里将时间信息分为第一组,歌词信息分为第二组。接着,用 match 去检测匹配函数调用者传递来的 str 参数,如果匹配,则处理 str 值,用 replace 替换正则表达式匹配的内容,替换为 $1 和 $2 ,$1 对应正则表达式所匹配的中括号里的内容,$2 对应的是中括号以外的内容即歌词。最后,将替换后的 str 返回给调用者。
如果我们这样调用函数:
console.log(foo(str));
则,在浏览器的控制台,会看到这样的结果:
00:14.70,朱红色的纽扣镶上你送我的钗
00:18.42,金玉口难开纵然你只为伊而改
00:22.20,游走在巷门外灯影盼我离开
00:26.04,躲开你眼神留我一个人去猜
00:29.67,今后的小说里会有我
00:33.45,被世俗推脱被年华错过
00:37.14,逃离这一时世的迷离
00:40.95,能否换你共度三生烟火
这是我们所需要的结果吧?
当然,这里只是简单处理,真正要做事,还有很多事情要考虑、细化。
|
评分
-
| 参与人数 1 | 威望 +50 |
金钱 +100 |
经验 +50 |
收起
理由
|
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
查看全部评分
|