1、LRC格式
歌词文件的格式非常简单,给个示例:
[ti:被遗忘的时光]
[ar:蔡琴]
[al:出塞曲]
[offset:500]
[00:00.80]是谁在敲打我窗
[00:09.50]是谁在撩动琴弦
这里,ti是标题,ar是歌手,al是专辑,offset是延时(单位ms,正数代表整体后延,负数代表整体前提),后面再就是具体哪个时间后(分:秒.毫秒)显示哪些歌词了。而在视频播放中,实际上只需要用到offset和后面的具体时间。
2、SRT格式
SRT格式是一种非常简单的字幕文件格式,示例:
1
00:00:22,027 --> 00:00:24,320
世人都喜欢抱怨。
2
00:00:25,865 --> 00:00:29,783
可事实却是:万事无绝对。
这便是两条字幕,每条字幕有三行,第1行是当前字幕序号(从1开始),第二行是字幕显示的时间段(时:分:秒,毫秒 --> 时:分:秒,毫秒),第三行才是要显示的字幕。对比可以看到,这两种格式的文件还是非常相似的,要做的便是一行一行地读取LRC文件,然后得到时间,组合成起止时间,写成SRT格式。需要提醒的是SRT时间是用逗号来分隔毫秒部分的,而LRC是用的点号。
3、基础数据
作为一个LRC文件,我们的数据结构大概是这样的:
1 public class LRC 2 { 3 public LRC(string path,int rank) 4 { 5 Path = path; 6 Rank = rank; 7 } 8 public string Path {get;set;} 9 public int Rank {get;set;}10 public TimeSpan Length {get;set;}11 public int Delay {get;set;}12 }
在此我省略了一些内容(主要就是INotifyPropertyChanged接口的实现部分),Path是一个歌词文件的所在路径,Rank是它在转换成字幕文件时所在的序号,Length则是歌曲应有的长度(默认为0,程序将计算lrc文件中最后一行歌词),Delay是歌曲的延时(也以ms为单位,正为延时,负为提前),但它与前面LRC文件中的offset不同,这是另外一个校对时间,是由我们自己来输入的,与LRC文件内容无关,默认也为0。
- PC官方版
- 安卓官方手机版
- IOS官方手机版