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 秒 ...
随机推荐
- Arcengine效率探究之一——属性的读取(转载)
http://blog.csdn.net/lk103852503/article/details/6566652 在写一个对属性表的统计函数时,发现执行速度奇慢无比,百思不得其解,其实算法并不复杂,后 ...
- CodeMirror mode编写
Writing CodeMirror Modes Modes typically consist of a single JavaScript file. This file defines, in ...
- opencv2 用imwrite 抽取并保存视频图像帧
最近在写一个车辆检测程序,程序中需要获取图像帧,并保存为图片,且放到指定目录中去,我在网上查了很多发现都是opencv1的有关操作,没有opencv2的操作,我参考网上的例子,结合着用opencv2新 ...
- 淘宝店铺模板开发SDK2.0下载安装图文教程
使用TortoiseSVN Checkout TAE SDK2.0 废话少说,切入主题: 1.在http://tortoisesvn.net/downloads.html上下载TortoiseSVN ...
- C#简述(二)
详情请参考:http://www.runoob.com/csharp/csharp-operators.html 1.C# 运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 ...
- Maven 学习笔记——Maven环境配置(1)
在学习Selenium的过程中,接触到了Maven(项目管理工具),不至于学一路忘一路,左耳朵进右耳多出,还是决定边学边记录,毕竟听的不如 看的,看的不如写的吗.首先学一样东西,肯定得明确学的是什么, ...
- [转帖]SSL/TLS/WTLS原理
SSL/TLS/WTLS原理 作者:yawl < yawl@nsfocus.com >主页:http://www.nsfocus.com日期:2001-02-19 一 前言 首先要澄清一下 ...
- IIS 下 搭建简单的FTP服务器
1. 修改用户策略, 创建简单用户密码 命令行输入 gpedit.msc 打开组策略 位置 2. 创建一个FTP使用的用户 net user zhaobsh Test6530 /add 3. 安装II ...
- JS animate动画
<!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...
- hexo d 报错‘fatal: could not read Username for 'https://github.com': No error’
问题描述 今天早上,一如往常的往在github上创建的hexo博客上传文章,结果报错 'fatal: could not read Username for 'https://github.com': ...