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格式 - 维基百科

.

原文地址:https://www.cnblogs.com/cc11001100/p/9941715.html

时间: 2024-10-29 19:08:33

lrc歌词文件格式的相关文章

Java使用正则表达式解析LRC歌词文件

LRC歌词是一种应用广泛的歌词文件,对其进行解析时 标准格式: [分钟:秒.毫秒] 歌词 1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.InputStreamReader; 5 import java.util.ArrayList; 6 import java.util.HashMap; 7 import java.util.Li

c++下lrc歌词文件检索(自己写的检索歌词文件,记录点滴)

贴上一个文档,是写这个程序的基本的思路,当然具体的程序和这个有一些出入,但是大体上一样.求批评指正. /*目标:在一个文件夹下吧所有的lrc歌词文件用程序导入,进行分析,最后的结果用TXT表示出来.*/ /*分析:只要建立了倒排索引就可以很容易把歌词的索引文件输入到il.txt中,所以应当有一个函数实现输入倒排索引,而后建立文件输出txt: 0.bool Lyricsindex_out(Lyric_index_list index_list[],int m ){} //相关的有: struct

Lrc歌词-开发标准

LRC歌词是在其程序当中实现的专门用于MP3等歌词同步显示的标签式的纯文本文件,如今已经得到了广泛的运用.现就LRC歌词文件的格式规定详细说明,已供程序开发人员参考. LRC文件是纯文本文件,可以用记事本等文本编辑工具查看和编辑.LRC文件中大量使用这类似[*:*]以及[*:*.*]这样的标签,而且标签是无须排序的,除此之外的全是文字. 首先是一些说明性的标签,这些是一般都在文件的开头的,标签的标识是不区分大小写的,形式如下: [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者](

我的Android进阶之旅------&gt;Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能

前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内容的实体类LrcRow 2解析歌词的构造器 ILrcBuilder接口 DefaultLrcBuilder歌词解析构造器 lrc歌词原始内容 lrc歌词解析后的内容 三显示LRC歌词内容 1定义一个ILrcViewListener接口 2定义一个ILrcView接口 3自定义一个LrcView 同步

OC lrc歌词解析

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {     FILE* fp1;//定义文件指针用于读文件     char* fp2;//用来判断是否歌词读完     char s[80];//暂存歌词     long int time2=0;     long int time=0;//用来计算时间,精度为秒,不够完善,望高人指点     int a=1;//起判断作用     fp1=f

小程序歌词展示,格式lrc歌词

代码: wxml: <view class="page"> <view class="lrc" style="margin-top:{{marginTop}}px;height:{{lrcHeight}}px"> <block wx:for="{{lry}}" wx:key=""> <view class="lry {{currentIndex == in

[写代码]处理一组lrc歌词文件

看到博客http://wwj718.github.io/regex-demo2.html,又想用C++写文本处理了. 将如下文件: [00:00.12]section 2. [00:02.68]you will part of a radio programme about the opening of a new local sports shop. [00:09.32]first you have some time to look at questions 11 to 16. [00:39

10行代码解析krc歌词文件

互联网上,我们常见的歌词格式有 LRC.TRC(天天动听歌词).KRC(KuGou ResourCe,酷狗资源文件)和 QRC(QQ音乐歌词):在影视制作中,人们通常会用其他的卡拉 OK 字幕格式,例如 KSC(KBuilder 卡拉 OK 字幕描述脚本文件) 和 KAJ(Sayatoo 项目文件) 格式. 一.lrc文件实例 lrc意思是lyric [ti:最炫民族风] [ar:凤凰传奇] [by:百度网友] [00:23.25]苍茫的天涯是我的爱 [00:27.16]绵绵的青山脚下花正开 [

看看如何用C语言解析LRC格式的歌词(下)

接上一篇,接下来将来看看怎么实现lyric.c文件. 嗯,在详细说明每个实现的函数之前,首先要在lyric.c中实现在头文件中声明的一些全局变量的定义.当然,要记得定义指针时应拴住指针到一个合法的位置处.因为一个未初始化的指针可能指向内存中任何一个位置,或许是个合法可访问的位置,又或许是个非法不可访问的位置.所以,为了安全起见,我们应当养成好习惯,即在指针初始化时指向一个确定的位置.具体定义如下: //initialize some global variables. char* lrc_tit