iOS音樂播放器開發(fā)(擴(kuò)展)-歌詞格式

我是配圖

大家好 , 我是LEE. 一名有信仰的果粉Coder. ?

非常感謝大家利用自己寶貴的時(shí)間來閱讀我的文章 , 我并非大神 , 只是一枚努力成為大神的猿. 這篇文章主要寫一個(gè)iOS系統(tǒng)下的音樂播放器 , 我會(huì)一步一步的去完成這個(gè)播放器的開發(fā) , 并且會(huì)分析一些主要的技術(shù)點(diǎn)以及注意事項(xiàng)等 . 如果你是一個(gè)小白初學(xué)者 , 希望你看完后能夠?qū)δ愕奶嵘兴鶐椭?, 如果你是一個(gè)老司機(jī) , 希望可以得到你的指點(diǎn) , 有任何不妥的地方 歡迎指正 , 我會(huì)認(rèn)真改正 . 那么.. 開車了~

前言

在開發(fā)音樂播放器時(shí) , 針對(duì)歌詞的處理是必不可少的 , 而要想解析歌詞得到我們需要的數(shù)據(jù) , 首先就要了解歌詞數(shù)據(jù)的構(gòu)成格式 , 下面為大家簡(jiǎn)單介紹幾種常見的歌詞格式.

格式分析

當(dāng)今互聯(lián)網(wǎng)上 , 我們常見的歌詞格式有 LRC、TRC(天天動(dòng)聽歌詞)蜀备、KRC(KuGou ResourCe , 酷狗資源文件)和 QRC(QQ音樂歌詞) . 下面我為大家分析比較這些歌詞格式.

LRC 格式

LRC 歌詞格式是世界上最通用的歌詞格式 , 沒有之一 . 它是最基本的歌詞格式 , 幾乎沒有支持其他歌詞格式而不支持這個(gè)歌詞格式的播放器 . LRC 歌詞格式的特性就是——簡(jiǎn)單.

      [ti:青花瓷]
      [ar:周杰倫]
      [al:我很忙]
      [00:00.00]青花瓷 - 周杰倫
      [00:20.89]素胚勾勒出青花筆鋒濃轉(zhuǎn)淡
      [00:25.58]瓶身描繪的牡丹一如你初妝
      [00:29.96]冉冉檀香透過窗心事我了然
      [00:34.43]宣紙上 走筆至此擱一半
      [00:38.99]釉色渲染仕女圖韻味被私藏
      [00:43.33]而你嫣然的一笑如含苞待放
      [00:47.80]你的美一縷飄散
      [00:50.27]去到我去不了的地方
      [00:56.40]天青色等煙雨 而我在等你
      [01:00.43]炊煙裊裊升起 隔江千萬里
      [01:05.34]在瓶底書漢隸仿前朝的飄逸
      [01:09.37]就當(dāng)我為遇見你伏筆

簡(jiǎn)單分析一下
首先有一些記錄歌曲及歌詞信息的東東 , 我們將其稱作"ID 標(biāo)簽" (ID Tags) , 它可以包含歌曲名 (ti) , 專集 (al) , 歌手 (ar) , 歌詞創(chuàng)建者 (by) , 歌詞延遲調(diào)整 (offset) 等信息.

下面是主體部分 , LRC 格式為每行歌詞指定起始時(shí)刻 , 格式為

      [分鐘:秒.百分秒].

以上說的是簡(jiǎn)單的 LRC 格式 也是我們最常見的格式 . 事實(shí)上 , 還有一些對(duì)其進(jìn)行了擴(kuò)展和完善 , 比如有一種擴(kuò)展的簡(jiǎn)單格式和一種增強(qiáng)格式.

擴(kuò)展的 LRC 格式在原來的基礎(chǔ)上支持 "男女合唱標(biāo)記" . 語法是: 在歌詞正文前添加 "M:" (男) 济炎、"F:" (女) 或 "D:" (合) . 下面就是一個(gè)示例 . 但是 , 這種格式并沒有被廣泛使用.

    [00:10.00]使用默認(rèn)的顏色應(yīng)該是藍(lán)色
    [00:12.35]F: 這行一般顯示為紅色
    [00:15.10]M: 男聲開始了
    [00:20.05]繼續(xù)男聲
    [00:25.45]D: 合唱部分開啟,一般為綠色

增強(qiáng) LRC 格式支持在原格式基礎(chǔ)上加入了逐字精準(zhǔn)支持 . 通過在每個(gè)字 (也可以是詞) 外添加額外的時(shí)刻標(biāo)簽<分鐘:秒.百分秒> . 這種格式的設(shè)計(jì)者的主頁已經(jīng)掛掉了 , 恕我不能提供更多信息和具體的示例 . 維基百科給的示例如下:

    [mm:ss.xx] <mm:ss.xx> 第一行第一個(gè)詞 <mm:ss.xx> 第一行第二個(gè)詞 <mm:ss.xx> ... 第一行最后一個(gè)詞 <mm:ss.xx>
    [mm:ss.xx] <mm:ss.xx> 第二行第一個(gè)詞 <mm:ss.xx> 第二行第二個(gè)詞 <mm:ss.xx> ... 第二行最后一個(gè)詞 <mm:ss.xx>...
    [mm:ss.xx] <mm:ss.xx> 最后一行第一個(gè)詞 <mm:ss.xx> 最后一行第二個(gè)詞 <mm:ss.xx> ... 最后一行最后一個(gè)詞 <mm:ss.xx>

TRC 格式

TRC 格式是由天天動(dòng)聽制定的一種歌詞格式 , 可以看作是對(duì) LRC 格式的擴(kuò)展-----為什么我這樣說呢 ? 請(qǐng)看下面我從一 TRC 文件中從頭摘取的文本.

    [ar:胡彥斌]
    [ti:當(dāng)你要離開的時(shí)候]
    [al:]
    [total:243000]
    [offset:0]
    [by:ttpod]
    [00:16.54]<250>當(dāng)<300>你<1852>要<249>離<452>開<201>的<451>時(shí)<3801>候
    [00:24.32]<200>我<200>們<1201>走<250>過<250>了<251>無<350>數(shù)<350>個(gè)<600>路<3851>口

因此 , 我們可以下結(jié)論 , TRC 格式在 LRC 格式基礎(chǔ)上 , 歌詞正文中每個(gè)字的前面增加了時(shí)間標(biāo)記<毫秒數(shù)> , 每個(gè)字連續(xù)解析 , 支持了逐字精準(zhǔn) . (上文中"字"可理解為詞) , 這在遇到英文時(shí)尤其有用.


KRC 格式

KRC 是酷狗公司推出的專利歌詞格式 , 主要是支持了逐字精準(zhǔn) , 解決了所謂“歌詞顯示不準(zhǔn)確”的問題 . 酷狗在很久之前在用 LRC 歌詞做卡拉 OK 效果 , 但由于 LRC 的特性問題 , 在某一行中 , 每個(gè)字的持續(xù)時(shí)間只能是平均分配的 (直到現(xiàn)在饭尝,還有不少播放器是這樣做的) , 想必是后來實(shí)在看不下去了吧 . 這里值得說一點(diǎn) , 酷狗的歌詞是經(jīng)過加密處理的 , 直接打開會(huì)看到全部都是亂碼 , 不過這種事還是難不倒萬能的天朝攻城獅 , 下面是解密后的歌詞片段:

    [id:$00000000]
    [ar:信樂團(tuán)]
    [ti:北京一夜]
    [by:帥比LEE]
    [hash:766fe295bf2722a9ede2abdd61d580c1]
    [total:278438]
    [sign:大家去北京玩一夜吧!!!!]
    [53883,3092]<0,632,0>One <632,784,0>Night <1416,372,0>in <1788,548,0>北<2336,755,0>京
    [56675,3539]<0,560,0>我<560,416,0>留<976,392,0>下<1368,412,0>許<1780,392,0>多<2172,1366,0>情
    [59914,2577]<0,549,0>不<549,276,0>管<825,252,0>你<1077,214,0>愛<1291,182,0>與<1473,212,0>不 <1685,887,0>愛
    [62191,3344]<0,560,0>都<560,210,0>是<770,210,0>歷<980,204,0>史<1184,202,0>的<1386,564,0>塵<1950,1387,0>埃

通過觀察我們可以看出 , KRC 格式記錄了歌詞的制作者名稱乳怎、ID、個(gè)性簽名 , 歌曲的基本信息也有在列 , 還包括歌曲長(zhǎng)度和歌曲 hash 值 . 歌曲的 hash 值是實(shí)現(xiàn)打開歌詞文件就抓取對(duì)應(yīng)歌曲要求的重要信息 . 而在正文中 , 語法為:

    [此行開始時(shí)刻距0時(shí)刻的毫秒數(shù),此行持續(xù)的毫秒數(shù)]<0,此字持續(xù)的毫秒數(shù),0>歌<此字開始的時(shí)刻距此行開始時(shí)刻的毫秒數(shù),此字持續(xù)的毫秒數(shù),0>詞<此字開始的時(shí)刻距此行開始時(shí)刻的毫秒數(shù),此字持續(xù)的毫秒數(shù),0>正<此字開始的時(shí)刻距此行開始時(shí)刻的毫秒數(shù),此字持續(xù)的毫秒數(shù),0>文

由此可見 , 酷狗的歌詞格式也是支持逐字同步的 , 只不過語法中最后那個(gè) 0 我是真不懂啥意思 - - , 可能是延遲偏移毫秒數(shù)或者是巴拉巴拉什么的.


QRC 格式

QRC 是QQ音樂推出的專用歌詞格式 , 同樣支持逐字精準(zhǔn) , 先前 QRC 格式是一種比較友好和開放的格式 , 但是現(xiàn)在.....萬惡的加密 , 它現(xiàn)在變成了一種可以說比 KRC 還封閉的格式 . 現(xiàn)在我們既不能查看到其源碼 , 也無法制作這種格式的歌詞 . 下面是早年間存在于世的 QRC歌詞片段:

    [1790,2062]那(1790,375)一(2165,309)年  (2474,315)汪(2789,311)蘇(3100,314)瀧(3414,438)
    [5052,3516]作(5052,252)曲(5304,248):(5552,252)汪(5804,253)蘇(6057,247)瀧 

解析語法為 (方括號(hào)內(nèi)表示一行的 , 小括號(hào)表示每個(gè)字的) :

    [開始時(shí)間ms,持續(xù)時(shí)間ms]歌詞 (開始時(shí)間ms , 持續(xù)時(shí)間ms) 

感覺和 KRC 很像有木有 ? 現(xiàn)在具體是什么樣 只有QQ音樂項(xiàng)目組知道了.


總結(jié)

LRC 最簡(jiǎn)單 , 最廣泛 , 但是沒有逐字精準(zhǔn) . TRC觉吭、KRC轰异、QRC 支持逐字精準(zhǔn) , 但是其中 KRC 和 QRC 格式不開放 . 從這點(diǎn)上看 , TRC 是不錯(cuò)的選擇 . 但是 KRC 歌詞的資源更多 (應(yīng)僅次于 LRC 的資源 ) , 既然都已經(jīng)出現(xiàn)了解析方法 , 利用下應(yīng)該也是可以的 (但 KRC 格式擁有專利 , 謹(jǐn)慎喲) , LRC 總歸來說,是只能滿足簡(jiǎn)單需求的啦 , 如果你只是用于研究寫寫demo , TRC 和 LRC 就夠了.

最后提醒大家一下 , 如果你正在做一個(gè)音樂播放器類的APP , 那么你一定要注意解析歌詞時(shí)的容錯(cuò)處理 , 千萬別因?yàn)楦柙~數(shù)據(jù)有一點(diǎn)小錯(cuò)誤而導(dǎo)致你整個(gè)APP蹦掉 , 血淋淋的教訓(xùn).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末罢坝,一起剝皮案震驚了整個(gè)濱河市绳匀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炸客,老刑警劉巖疾棵,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異痹仙,居然都是意外死亡是尔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門开仰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拟枚,“玉大人,你說我怎么就攤上這事众弓《鹘Γ” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵谓娃,是天一觀的道長(zhǎng)脚乡。 經(jīng)常有香客問我,道長(zhǎng)滨达,這世上最難降的妖魔是什么奶稠? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮捡遍,結(jié)果婚禮上锌订,老公的妹妹穿的比我還像新娘。我一直安慰自己画株,他們只是感情好辆飘,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谓传,像睡著了一般蜈项。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上良拼,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天战得,我揣著相機(jī)與錄音,去河邊找鬼庸推。 笑死常侦,一個(gè)胖子當(dāng)著我的面吹牛浇冰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聋亡,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼肘习,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了坡倔?” 一聲冷哼從身側(cè)響起漂佩,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罪塔,沒想到半個(gè)月后投蝉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡征堪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年瘩缆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佃蚜。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庸娱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谐算,到底是詐尸還是另有隱情熟尉,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布洲脂,位于F島的核電站斤儿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腮考。R本人自食惡果不足惜雇毫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望踩蔚。 院中可真熱鬧,春花似錦枚粘、人聲如沸馅闽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽福也。三九已至,卻和暖如春攀圈,著一層夾襖步出監(jiān)牢的瞬間暴凑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工赘来, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留现喳,地道東北人凯傲。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嗦篱,于是被迫代替她去往敵國(guó)和親冰单。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容