lrc歌词文件格式
一、lrc文件有什么作用
lrc文件就是一个文本文件,用来记录歌曲的歌词信息,使得播放歌曲时能够让歌词与声音同步显示,类似于电影字幕那种效果。
心情很丧时我们会听首歌陶冶一下情操,不知你是否注意过音乐播放软件播放音乐时歌词信息,这是酷我音乐的歌词播放界面:

当前正在播放的这一句歌词会被高亮显示,从上面这幅图我们能够看出来,这个歌词文件至少记录了什么时间播放哪一句歌词,这些信息都是放在lrc文件中的,一个lrc文件的格式大致如下:
[al:本歌所在的唱片集]
[ar:演出者-歌手]
[au:歌詞作者-作曲家]
[by:此LRC文件的创建者]
[offset:+/- 以毫秒为单位加快或延後歌詞的播放]
[re:创建此LRC文件的播放器或编辑器]
[ti:歌词(歌曲)的标题]
[ve:程序的版本]
[mm:ss.xx]歌词正文
...
[mm:ss.xx]歌词正文,mm表示从开始到现在的分钟数,ss表示从开始到现在的描述,xx表示n*10毫秒,精度是10毫秒。
二、LRC解析器
看到这个格式这么简单,便尝试写一个简单的格式解析器,文件结构参考维基百科的定义。
Lrc.java:
package cc11001100.music; import lombok.Data; import java.util.Map;
import java.util.TreeMap; /**
* @author CC11001100
*/
public class Lrc { // 唱片集
private String album;
// 演唱者
private String artist;
// 歌词作者
private String author;
// 此LRC文件的创建者
private String by;
// 创建此LRC文件的播放器或编辑器
private String re;
// 歌词标题
private String title;
// 程序的版本
private String ve; // 歌词正文
private Map<String, String> lyric; public Lrc() {
lyric = new TreeMap<>();
} public String getAlbum() {
return album;
} public void setAlbum(String album) {
this.album = album;
} public String getArtist() {
return artist;
} public void setArtist(String artist) {
this.artist = artist;
} public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public String getBy() {
return by;
} public void setBy(String by) {
this.by = by;
} public String getRe() {
return re;
} public void setRe(String re) {
this.re = re;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getVe() {
return ve;
} public void setVe(String ve) {
this.ve = ve;
} public Map<String, String> getLyric() {
return lyric;
} public void setLyric(Map<String, String> lyric) {
this.lyric = lyric;
}
}
LrcParser.java:
package cc11001100.music; import cc11001100.acl.ip.IpAcl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils; import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.List; import static com.alibaba.fastjson.JSON.toJSONString; /**
* 用于解析LRC歌词
*
* @author CC11001100
*/
public class LrcParser { public static Lrc parse(List<String> lineList) {
Lrc lrc = new Lrc();
for (String line : lineList) {
if (StringUtils.isBlank(line)) {
continue;
}
line = line.toLowerCase();
// 唱片集
if (line.startsWith("[al:")) {
lrc.setAlbum(line.substring(4, line.length() - 1));
} else if (line.startsWith("[ar:")) {
// 演唱者
lrc.setArtist(line.substring(4, line.length() - 1));
} else if (line.startsWith("[au:")) {
// 歌词作者
lrc.setAuthor(line.substring(4, line.length() - 1));
} else if (line.startsWith("[by:")) {
// LRC制作者
lrc.setBy(line.substring(4, line.length() - 1));
} else if (line.startsWith("[re:")) {
// 此LRC文件的创建者或编辑器
lrc.setRe(line.substring(4, line.length() - 1));
} else if (line.startsWith("[ti:")) {
// 歌词标题
lrc.setTitle(line.substring(4, line.length() - 1));
} else if (line.startsWith("[ve:")) {
// 程序的版本
lrc.setVe(line.substring(4, line.length() - 1));
} if (line.startsWith("[ver:")) {
// 程序的版本
lrc.setVe(line.substring(5, line.length() - 1));
} else {
int delimiterIndex = line.indexOf("]");
String time = line.substring(1, delimiterIndex);
String lrcContent = line.substring(delimiterIndex + 1);
lrc.getLyric().put(time, lrcContent);
}
}
return lrc;
} public static void main(String[] args) throws IOException { List<String> lineList = FileUtils.readLines(new File("H:/KwDownload/Lyric/陈鸿宇-理想三旬.lrc"), "GBK");
Lrc lrc = parse(lineList);
System.out.println(toJSONString(lrc, SerializerFeature.PrettyFormat)); } }
相关资料:
1. LRC格式 - 维基百科
.
lrc歌词文件格式的更多相关文章
- 浅析LRC歌词文件
[时间:2018-12] [状态:Open] [关键词:字幕,LRC,歌词,lyric,文件格式] 0 引言 几年前(2010年左右),网络音乐流行与免费的时代,网上有大量的mp3,使用比较常见的播放 ...
- Java使用正则表达式解析LRC歌词文件
LRC歌词是一种应用广泛的歌词文件,各主流播放器都支持. lrc歌词文本中含有两类标签: 1.标识标签(ID-tags) [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者(指编辑LRC ...
- Lrc歌词批量下载助手 MP3歌词批量下载助手
Lrc歌词批量下载助手 MP3歌词批量下载助手 易歌词的服务器已经挂掉,各个主流播放器已不提供明确的下载Lrc服务,当上G的MP3文件遇上苦逼的播放器,二缺就诞生了!本软件就是在这种背景下诞生的 ...
- 如何将lrc歌词文件批量转换为ANSI编码?
有些MP3.MP4或学习机只能播放ANSI编码的歌词文件,可是从网站上下载的歌词大多是UTF-8或者其它机器支持不了的编码,如何批量将这些lrc歌词文件转换成ANSI编码的文件呢? 工具/原料 萍客T ...
- Python脚本之Lrc歌词去时间轴转Txt文件,附带酷狗音乐APP关联已有krc歌词
一.Lrc歌词去时间轴转Txt文件 环境:Python2.7.x, Mac(Windows需装cygwin环境,当然你也可以自己改代码,Python新手,勿喷) # -*- coding: UTF-8 ...
- c#解析Lrc歌词文件
看到很多人解析歌词文件时写了一大片的字符处理代码,而且看得不是很明白,所以自己研究了一下, 首先来了解下Lrc文件 时间格式: 1.标准格式: [分钟:秒.毫秒] 歌词 注释:括号.冒号.点号全都要求 ...
- Lrc歌词-开发标准
LRC歌词是在其程序当中实现的专门用于MP3等歌词同步显示的标签式的纯文本文件,如今已经得到了广泛的运用.现就LRC歌词文件的格式规定详细说明,已供程序开发人员参考. LRC文件是纯文本文件,可以用记 ...
- 我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能
前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...
- 怎样编辑LRC歌词
恭喜恭喜歌词 唐嫣 - 音乐巴士 http://www.yy8844.cn/geci/mswcn/nvunns.shtml 恭喜恭喜歌词感谢 音乐巴士 珍妮 编辑歌词匹配时间为: 03 分 06 秒 ...
随机推荐
- Delphi中 弹出框的用法
Delphi中的提示框有 Application.MessageBox ShowMessage messagedlg 个人认为 相对来说 Application.MessageBox 更加灵活 也相 ...
- Final发布——视频博客
1.视频链接 视频上传至优酷自频道,地址链接:http://v.youku.com/v_show/id_XMzk1OTIwNTUwMA==.html?spm=a2h0j.11185381.listit ...
- 【读书笔记】Linux内核设计与实现(第五章)
5.1 内核通信 系统调用在用户空间和硬件设备之间添加了一个中间层. 该层主要作用: 1.为用户空间提供了一种硬件的抽象接口. 2.保证了系统的稳定和安全. 3.每个进程都运行在虚拟系统中. 在Lin ...
- Supervised Hashing with Kernels, KSH
Notation 该论文中应用到较多符号,为避免混淆,在此进行解释: n:原始数据集的大小 l:实验中用于监督学习的数据集大小(矩阵S行/列的大小) m:辅助数据集,用于得到基于核的哈希函数 r:比特 ...
- canvas实现五子棋界面
1.获取canvas画布 var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); ...
- JS 一些问题与解决方法
一.post/get传输json数据中包含特殊字符 在使用HTTP请求传输数据时,因为他本身也需要一些字符做标记,比如= &,所以传输的数据中如果有特殊字符,就会被错误的理解成标记字符做了一些 ...
- 『编程题全队』Alpha 阶段冲刺博客Day6
1.每日站立式会议 1.会议照片 2.昨天已完成的工作统计 孙志威: 1.添加JSON处理模块 2.添加了团队看板中的添加团队任务功能 3.添加了团队看板中的添加按钮 孙慧君: 1.个人任务框UI的设 ...
- [代码]--给GridControl中的某列添加图片
要让GridControl的某列显示图片只需要数据源中有图片就可以正确显示 1.给DataSet添加一列,格式为image ds.Tables[].Columns.Add("SIGN&quo ...
- flask再学习-重构!启动!
1.打造MVC框架: common/libs:放置一些功能公用的方法. common/models:放置ORM模型 config:配置文件属性 web/controllers:视图层,处理url和ap ...
- BZOJ4628 BJOI2016IP地址(trie)
离线,每次修改相当于对该规则的所有匹配点的值+1,考虑在trie上打加法标记和匹配标记,匹配标记不下传,加法标记下传遇到匹配标记时清空.注意是用b时刻前缀-a时刻前缀,而不是(a-1)时刻前缀,具体我 ...