MP3製作之LRC歌詞檔案解析(附:原始碼)

來源:互聯網
上載者:User

LRC 歌詞同步

一、準備工作
  既然要製作歌詞同步程式,首先要準備一首歌,我們就以“周杰倫-青花瓷”為例。首先要下載這首“青花瓷.mp3”,儲存為“C:/My Player/Music/青花瓷.mp3”。還要下載青花瓷的 LRC 檔案,大家可以到網上下載(地址見附錄),將常值內容儲存為“C:/My Player/LRC/青花瓷.lrc”。我們的程式(類和FLA)則儲存在“C:/My Player/”檔案夾下。
青花瓷.lrc 檔案:
[ti:青花瓷]
[ar:周杰倫]
[al:我很忙]
[by:張琪]
[00:00.00]傳送簡訊18到291199下載該歌曲到手機
[00:01.11]青花瓷
[03:36.49]
[00:21.39]素眉勾勒鞦韆話北風龍轉丹 
[00:26.08]屏層鳥繪的牡丹一如你梳妝
[00:30.46]黯然騰香透過窗心事我瞭然 
[00:34.93]宣紙上皺邊直尺各一半
[00:39.49]油色渲染侍女圖因為被失藏 
[00:43.83]而你嫣然的一笑如含苞待放
[00:48.30]你的美一縷飄散 
[00:50.77]去到我去不了的地方
[02:23.97][00:55.77]
[03:01.92][02:25.63][00:56.90]天正在等煙雨 
[03:03.57][02:27.91][00:58.99]而我在等你 
[03:05.92][02:30.44][01:00.93]炊煙嫋嫋升起 
[03:07.76][02:32.25][01:03.49]隔江千萬裡
[03:10.36][02:34.85][01:05.84]在平地書刻你房間上的飄影 
[03:14.67][02:38.73][01:09.87]就當我為遇見你伏筆
[03:18.83][02:43.35][01:14.34]天正在等煙雨 
[03:21.20][02:45.60][01:16.68]而我在等你 
[03:23.71][02:48.01][01:18.99]月色被打撈起 
[03:25.74][02:50.10][01:21.18]掩蓋了結局
[03:28.33][02:52.54][01:23.72]如傳世的青花瓷在獨自美麗 
[03:32.30][02:56.67][01:27.65]你眼的笑意
[01:50.25]色白花青的景已躍然於碗底 
[01:54.69]臨摹宋體落款時卻惦記著你
[01:59.22]你隱藏在藥效裡一千年的秘密 
[02:03.75]急溪裡猶如羞花沾落地
[02:08.32]林外芭蕉 惹咒語 
[02:10.57]夢幻的銅綠
[02:12.84]而我路過那江南小鎮的等你
[02:17.19]在潑墨山水畫裡 
[02:19.75]你從墨色深處被隱去
  大家也可以把這個常值內容複製下來,然後在“C:/My Player/LRC/”下建立一個文字文件,將內容粘貼上去,再將文檔儲存為“青花瓷.lrc”,注意副檔名是“.lrc”。
Lrc歌詞檔案格式說明

   副檔名為Lrc格式的檔案,是MP3播放器唯一能夠識別的歌詞檔案,在MP3數位播放器或千千靜聽中可以區同步顯示歌詞。
它是一種包含著“[*:*]”形式的“標籤(tag)”的、基於純文字的歌詞專用格式。
[b][color=#00CCFF]Lrc歌詞文本中含有兩類標籤:[/color][/b]
■ 標識標籤(ID-tags)
其格式為"[標識名:值]"。大小寫等價。以下是預定義的標籤。   
[ar:藝人名]   
[ti:曲名]   
[al:專輯名]   
[by:編者(指編輯LRC歌詞的人)]   
[offset:時間補償值] 其單位是毫秒,正值表示整體提前,負值相反。這是用於總體調整顯示快慢的。
■ 時間標籤(Time-tag)
    形式為"[mm:ss]"或"[mm:ss.fff]"(分鐘數:秒數)。數字須為非負整數, 比如"[12:34.5]"是有效,而"[0x0C:-34.5]"無效。
    時間標籤需位於某行歌詞中的句首部分,一行歌詞可以包含多個時間標籤(比如歌詞中的迭句部分)。當歌曲播放至達某一時間點時,MP3就會尋找對應的時間標籤並顯示標籤後面的歌詞文本,這樣就完成了“歌詞同步”的功能。
[分鐘:秒.毫秒]歌詞
    例如,“[01:50.25]色白花青的景已躍然於碗底”表示在1分50.25秒時,歌詞內容是“色白花青的景已躍然於碗底”。
    還有一種形式是“[03:01.92][02:25.63][00:56.90]天正在等煙雨”這種形式常用於賦格部分(俗稱:歌曲的高潮部分),它表示在 03:01.92, 02:25.63, 00:56.90 時的歌詞都是“天正在等煙雨”。由於這種形式的存在,使後面的編程稍顯複雜,不過沒關係,憑藉各位的聰明智慧一定沒問題。

用記事本按照上述格式寫好後,將拓展名改為lrc即可做出該檔案.LRC歌詞是一種通過編輯器把歌詞按歌曲歌詞出現的時間編輯成一個檔案,在播放歌曲時同步依次顯示出來的一種歌詞檔案。把歌曲和LRC歌詞命為相同的檔案名稱放在同一目錄下,用帶顯示歌詞功能的播放器播放歌曲時歌詞就可以同步顯示顯示,方便查看和學歌。

(供程式員閱讀參考)
    以下列出了開發支援LRC格式的軟體時應遵守的一些標準。無論是[color=#FF0000]否在行首[/color],[color=#FF0000]行內[/color]凡具有[color=#FF0000]“[*:*]”[/color]形式的都應認為是標籤。(注意:其中的冒號並非全形字元“:”)
凡是標籤都不應顯示。
    凡是標籤,且被冒號分隔的兩部分都為[color=#FF0000]非負數[/color],則應認為是[color=#FF0000]時間標籤[/color]。因此,對於非標準形式(非“[mm:ss]”)的時間標籤也應能識別(如“[0:0]”)。凡是標籤,且非時間標籤的,應認為是標識標籤。標識名中大小寫等價。
•為了向後相容,應對未定義的新標籤作忽略處理。另應對注釋標籤([:])後的同一行內容作忽略處理。 應允許一行中存在多個標籤,並能正確處理。應能正確處理未排序的標籤。

實現功能 舉例:
LRC 內容如下:
[00:43.83]而你嫣然的一笑如含苞待放
[00:48.30]你的美一縷飄散 
[00:50.77]去到我去不了的地方
[03:01.92][02:25.63][00:56.90]天正在等煙雨 
[03:03.57][02:27.91][00:58.99]而我在等你 
[03:05.92][02:30.44][01:00.93]炊煙嫋嫋升起 
[03:07.76][02:32.25][01:03.49]隔江千萬裡
通過字串處理 放到二維數組或結構體中,並按照時間排序
43830 而你嫣然的一笑如含苞待放
48300 你的美一縷飄散
50770 去到我去不了的地方
56900 天正在等煙雨
58990 而我在等你
60930 炊煙嫋嫋升起
63490 隔江千萬裡
145630 天正在等煙雨
147910 而我在等你
150440 炊煙嫋嫋升起
152250 隔江千萬裡
181920 天正在等煙雨
183570 而我在等你
185920 炊煙嫋嫋升起
187760 隔江千萬裡
操作步驟如下:
1—讀取聲音:青花瓷.mp3
2—播放聲音及擷取當前播放時間(毫秒):time_ms
3—讀取外部檔案:青花瓷.lrc
   ——讀取 LRC 檔案,這一步非常簡單與讀取普通的文字檔是一樣的;
   ——將讀取的 LRC 資料按行分割( "/n" 為分行符號),數組的每一個元素代表 LRC 的一行內容;
   —簡單的Regex應用或字串取子串操作
   —將字串按分隔字元分隔為數組
   ——在數組中提取每一行的時間及歌詞,將時間字串轉換為電腦可讀取的時間(mm*60+ss.ff)毫秒,解決時間序列的問題;
4—.最後,隨著音樂的播放,讀取播放時間段內的歌詞。用當前播放時間time_ms與LRCarray(數組或結構體)中的時間相比較
  如果相等就顯示LRCarray中的歌詞

附件:
  [url=http://download.csdn.net/source/3189841]LRC歌詞讀取與排序演算法(C語言版)[/url]
   LRC歌詞檔案格式與讀取C++實現(C++)
  [url=http://download.csdn.net/source/3189916]LRC檔案解析詳細介紹與原始碼(ActionScript網頁指令碼[/url])

——————————————拋磚引玉——————————————————————
以上代碼屬於網路收集,請大家也貢獻出自己的實現方法,通俗易懂的
例如 讀[00:50.77]時間標籤的時候可以用fscanf格式化讀取函數
      fscanf(fp,“[%d:%s]”,&mm,&ss);
可以參考的函數有:
              fp = fopen("C:/My Player/LRC/青花瓷.lrc", "r") ;  //開啟檔案
              fgets(str, 80, fp) ;      //讀取一行,放入數組str中
              ……
              ……
目的就是將檔案中的字串解析出來,請大家提點意見,最好能附上原始碼和注釋!!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.