1、LRC格式
歌詞文件的格式非常簡單,給個(gè)示例:
[ti:被遺忘的時(shí)光]
[ar:蔡琴]
[al:出塞曲]
[offset:500]
[00:00.80]是誰在敲打我窗
[00:09.50]是誰在撩動(dòng)琴弦
這里,ti是標(biāo)題,ar是歌手,al是專輯,offset是延時(shí)(單位ms,正數(shù)代表整體后延,負(fù)數(shù)代表整體前提),后面再就是具體哪個(gè)時(shí)間后(分:秒.毫秒)顯示哪些歌詞了。而在視頻播放中,實(shí)際上只需要用到offset和后面的具體時(shí)間。
2、SRT格式
SRT格式是一種非常簡單的字幕文件格式,示例:
1
00:00:22,027 --> 00:00:24,320
世人都喜歡抱怨。
2
00:00:25,865 --> 00:00:29,783
可事實(shí)卻是:萬事無絕對。
這便是兩條字幕,每條字幕有三行,第1行是當(dāng)前字幕序號(hào)(從1開始),第二行是字幕顯示的時(shí)間段(時(shí):分:秒,毫秒 --> 時(shí):分:秒,毫秒),第三行才是要顯示的字幕。對比可以看到,這兩種格式的文件還是非常相似的,要做的便是一行一行地讀取LRC文件,然后得到時(shí)間,組合成起止時(shí)間,寫成SRT格式。需要提醒的是SRT時(shí)間是用逗號(hào)來分隔毫秒部分的,而LRC是用的點(diǎn)號(hào)。
3、基礎(chǔ)數(shù)據(jù)
作為一個(gè)LRC文件,我們的數(shù)據(jù)結(jié)構(gòu)大概是這樣的:
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 }
在此我省略了一些內(nèi)容(主要就是INotifyPropertyChanged接口的實(shí)現(xiàn)部分),Path是一個(gè)歌詞文件的所在路徑,Rank是它在轉(zhuǎn)換成字幕文件時(shí)所在的序號(hào),Length則是歌曲應(yīng)有的長度(默認(rèn)為0,程序?qū)⒂?jì)算lrc文件中最后一行歌詞),Delay是歌曲的延時(shí)(也以ms為單位,正為延時(shí),負(fù)為提前),但它與前面LRC文件中的offset不同,這是另外一個(gè)校對時(shí)間,是由我們自己來輸入的,與LRC文件內(nèi)容無關(guān),默認(rèn)也為0。
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版