淺談動感歌詞-歌詞分析篇

1引言

關於動感歌詞,咱們都不陌生,最多見的就是去唱K時,MV上面的歌詞,還有就是酷狗、每天動聽和QQ音樂等播放器的歌詞,它們都是屬於動態歌詞,它們都是精確到每一個【字】,這大大提升了用戶的體驗。若是一個菜鳥想本身實現動感歌詞該怎麼辦?是的,下面我將從我本身的一些自身經從來談一下,怎樣實現動態歌詞.java

 我記得當時本身第一次弄java swing版本的音樂播放器,遇到歌詞模塊時,第一時間就是百度。可是度娘給我顯示的答案100%都是lrc的歌詞(lrc歌詞不是精確到字的,只精確到行),可見lrc歷史悠久,深深影響幾代人啊。其實當時,我也不喜歡用lrc歌詞,不過沒辦法啊!像當時流行的酷狗播放器,歌詞仍是加密的,你看不了。好了,等到好不容易知道了歌詞的內容,也解析出來了,就是不知怎樣編寫代碼才能在界面上面顯示出動感歌詞的效果。是的,就是由於這一大堆的不知道,不懂,阻礙了我對動態歌詞的進一步瞭解。app

2動態歌詞格式

下面將對如今流行的一些動感歌詞進行分析,由於咱們要實現動感歌詞的生成和顯示,就必需要先了解,它們的歌詞文件究竟保存了一些什麼內容,爲何能夠精確到每一個【字】。優化

2.1KSC歌詞

 這種歌詞格式應該是我最先就接觸的了,就是卡拉OK歌詞,它的歌詞內容是不加密的,真是幫了大忙。是的,在我走投無路的時候,是它拉了我一把,讓我對動感歌詞恢復了熱情,當時知道有這種歌詞格式時,我還特地去下載了一個《小灰熊卡拉ok字幕製做軟件》來製做歌詞。話很少說,看一下這種歌詞的格式是怎樣的:加密

karaoke.songname := '你要的愛'; spa

karaoke.singer := '戴佩妮';.net

karaoke.add('00:03.298', '00:06.771', '雖然常常夢見你', '467,215,195,936,282,568,810');  設計

karaoke.add('00:09.571', '00:12.105', '仍是毫無頭緒', '245,164,211,261,451,1202');

karaoke.add('00:14.809', '00:16.626', '外面正在下着雨', '271,200,195,179,271,266,435');blog

karaoke.add('00:17.245', '00:19.908', '今天是星期幾', '195,143,175,379,758,1013');資源

karaoke.add('00:20.492', '00:22.089', '[but ][i ][don`t ][know]', '179,190,286,942');開發

由其格式可知:行歌詞對英文和空格,都用了[]來包住,其實該歌詞解析起來,難度仍是挺大的。。。。

karaoke.songname := '{歌名}';

karaoke.singer := '{歌手}';

karaoke.add('{行開始時間}', '{行結束時間}', '{行歌詞}', '{每一個字持續的時間:單位爲 ms }');

2.2TRC歌詞

該歌詞是每天動聽使用的動感歌詞,因爲網上的資源比較少,我直接引用我參考的博客內容

[ar:胡彥斌]  

 [ti:當你要離開的時候]  

[al:]  

[total:243000]   

[offset:0] 

[by:ttpod]   

[00:16.54]<250>當<300>你<1852>要<249>離<452>開<201>的<451>時<3801>候   

[00:24.32]<200>我<200>們<1201>走<250>過<250>了<251>無<350>數<350>個<600>路<3851>口

由其格式可知:字前面的數字,爲該字的持續時間。因爲沒有行結束時間,解析起來,仍是有點難度。

[ar:歌手名]、[ti:歌曲名]、[al:專輯名]、[by:編輯者(指歌詞的製做人)]、[offset:時間補償值] (其單位是毫秒,正值表示總體提早,負值相反。這是用於整體調整顯示快慢的)[total:歌曲時間長度]

[{行開始時間}]<{每一個字持續時間:單位ms}>{字}<{每一個字持續時間:單位ms}>字

2.3KRC歌詞

該歌詞是酷狗使用的動感歌詞,無錯,加密的。不過網上早已有人破解了,下面給出破解的文本內容,該歌詞不只是加密,還對歌詞內容進行了壓縮處理。

[id:$00FF2B12]

[ar:李健]

[ti:美若黎明]

[by:]

[hash:e1c2628fad0a46f94df6b8b071df078f]

[al:]

[sign:]

[qq:]

[total:267096]

[offset:10000]

[language:eyJjb250ZW50IjpbXSwidmVyc2lvbiI6MX0=]

[1679,1550]<0,399,0>做<399,200,0>詞<599,250,0>:<849,301,0>李<1150,400,0>健

[3229,1650]<0,350,0>做<350,300,0>曲<650,350,0>:<1000,350,0>李<1350,300,0>健

由其格式可知:我表示 <0,350,0>最後一個0是什麼意思,我也不知道,可是這並不影響咱們對該歌詞的解析。。。。

[ar:歌手名]、[ti:歌曲名]、[al:專輯名]、[by:編輯者(指歌詞的製做人)]、[offset:時間補償值] (其單位是毫秒,正值表示總體提早,負值相反。這是用於整體調整顯示快慢的)[total:歌曲時間長度]、[sign:簽名]

[{行開始時間},{行持續時間}]<{字開始時間},{字持續時間},0>{字}<{字開始時間},{字持續時間},0>{字}

2.4HRCX歌詞

該歌詞是我在弄《樂樂音樂》音樂播放器時,自定義的一種歌詞格式(happy lyrics),它是能夠精確到【字】的。固然,我在生成該歌詞時,也對歌詞的內容進行了壓縮處理。下面給出解壓後的文本內容:

[ti:右手戒指];

[total:272706];

[ar:金海心];

[offset:0];

[by:HappyPlayer-PC];

haplayer.lrc('<1270,9630>','金海[心 ][- ]右手戒指','<1010,780,830,1410,800,1210,1410,910>');

haplayer.lrc('<18710,19810>','[la ][la ][la ]','<300,400,400>');

haplayer.lrc('<20020,22840><77150,79970><163120,165840><191920,194740>','是你夢中的女郎','<200,300,400,300,510,500,610><310,400,300,510,400,400,500><200,510,400,400,410,500,300><210,400,300,400,400,510,600>');

由其格式可知:歌詞內容方面參考了ksc歌詞,用[]來包住,將重複的歌詞(高潮部分)歸爲一行,這也算是一種優化。

[ar:歌手名]、[ti:歌曲名]、[by:編輯者(指歌詞的製做人)]、[offset:時間補償值] (其單位是毫秒,正值表示總體提早,負值相反。這是用於整體調整顯示快慢的)[total:歌曲時間長度]、

haplayer.lrc('<{行開始時間:單位ms},{行結束時間:單位ms}>','{歌詞}','<{字持續時間}>');

haplayer.lrc('<{行開始時間:單位ms},{行結束時間:單位ms}><{行開始時間:單位ms},{行結束時間:單位ms}>','{歌詞}','<{字持續時間}><{字持續時間}>');

3總結與分析

不論動感歌詞是什麼格式,內容怎樣變,它們都是能夠概括爲幾個屬性來設計實體類:

3.1標籤

[ar:歌手名]、[ti:歌曲名]、[by:編輯者(指歌詞的製做人)]、[offset:時間補償值] (其單位是毫秒,正值表示總體提早,負值相反。這是用於整體調整顯示快慢的)[total:歌曲時間長度]、

3.2行開始時間

3.3行結束時間

3.4行歌詞

3.5歌詞每一個字持續時間

4實體類設計

附上歌詞實體類、行歌詞實體類、標籤實體類

4.1歌詞實體(LyricsInfo)

 

4.2行歌詞實體(LyricsLineInfo)

 

4.3標籤實體(LyricsTag)

 

5參考博客

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

酷狗的krc歌詞文件的解析

6最後

下一篇,將介紹動態歌詞的生成。若有侵權,麻煩告知。

相關文章
相關標籤/搜索