C 解析Lrc歌詞檔案過程詳解

2022-10-07 09:15:10 字數 1983 閱讀 5856

看到很多人解析歌詞檔案時寫了一大片的字元處理**,而且看得不是很明白,所以自己研究了一下,

首先來了解下lrc檔案

時間格式:

1、標準格式:[分鐘:秒.毫秒] 歌詞

注釋:括號、冒號、點號全都要求英文輸入狀態;

2、其他格式①:[分鐘:秒] 歌詞;

3、其他格式②:[分鐘:秒:毫秒] 歌詞,與標準格式相比,秒後邊的點號被改成了冒號。

標準格式:

其格式為"[標識名:值]"。大小寫等價。以下是預定義的標籤。

[ar:藝人名]

[ti:曲名]

[al:**名] 

[by:編者(指編輯lrc歌詞的人)] 

[offset:時間補償值] 其單位是毫秒,正值表示整體提前,負值相反。這是用於總體調整顯示快慢的。

標準好啊,我就按照標準來做了 

public class lrc

///

/// 藝術家

///

public string artist

///

/// 程式設計客棧**

///

public string album

///

/// 歌詞作者

///

public string lrcby

///

/// 偏移量

///

public string offset

///

/// 歌詞

///

public dictionary lrcword = new dictionary();

///

/// 獲得歌詞資訊

///

/// 程式設計客棧th">歌詞路徑

/// 返回歌詞資訊(lrc例項)

public static lrc initlrc(string lrcpath)

else if (line.startswith("[ar:"))

else if (line.startswith("[al:"))

else if (line.startswith("[by:"))

else if (line.startswith("[offset:"))

else}}

} return lrc;

} ///

/// 處理資訊(私有方法)

///

///

/// 返回基礎資訊

static string splitinfo(string line)

}一行**:lrc lrc= lrc.initlrc("test.lrc"); 

我將分離好的歌詞放入了dictionary裡,當然也可以直接用陣列存,格式就要看實際的用途了,把這些都交給timespan來做吧。 

測試: 

很久以前有人提出了這個問題:一行歌詞裡面有多個時間會報錯,這麼久了也沒見人把好的方案提供出來,今天我花了點時間,修改了下,下面是獲取歌詞方法 

///

/// 獲得歌詞資訊

///

/// 歌詞路徑

/// 返回歌詞資訊(lrc例項)

public static lrc initlrc(string lrcpath)

else if (line.startswith("[ar:"))

else if (line.startswith("[al:"))

else if (line.startswith("[by:"))

else if (line.startswith("[offset:"))

else

}catch}}

}}

lrc.lrcword = dicword.orderby(t => t.key).todictionary(t => t.key, p => p.value);

return lrc;

}本文標題: c#解析lrc歌詞檔案過程詳解

本文位址:

使用lex來解析lrc歌詞檔案

剛學習lex的實踐.很簡單.lrc.l lex檔案,定義了time tag標記,以及操作 num 0 9 timetag n int yywrap 中間為空,沒有什麼要提前宣告的 num,timetag定義了識別乙個timetag的正規表示式 00 00 00 00.00 第乙個 後定義了找到乙個t...

基於前端的LRC歌詞檔案解析外掛程式

使用方法 本專案已發布到npm上,所以可用npm安裝或者直接引入檔案的方式使用。使用npm安裝 npm install lrc file parser s匯入 import import lyric from lrc file parser 直接引入檔案的方式 lrc file parser.min...

JS解析提取LRC格式的歌詞

參考 ar 王菲 ti 匆匆那年 00 00.51 王菲 匆匆那年 00 01.79 作詞 林夕 00 02.61 作曲 梁翹柏 00 28.64 匆匆那年我們 00 29.92 究竟說了幾遍 00 31.55 再見之後再拖延 00 34.25 可惜誰有沒有 00 35.67 愛過不是一場 00 3...