淘小兔

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。


点击下载

下载仅供下载体验和测试学习,不得商用和正当使用。

下载体验

请输入密码查看内容!

如何获取密码?

 

点击下载