HTML5實現歌詞同步


開篇

HTML5的最強大之處莫過於對媒體文件的處理,如利用一個簡單的vedio標簽就能夠實現視頻播放。相似地,在HTML5中也有相應的處理音頻文件的標簽,那就是audio標簽

在線Demo

audio標簽

實現一個audio標簽非常easy,相應的html代碼例如以下:

<audio id="player" src="music/我在人民廣場吃炸雞.mp3" autoplay controls>
</audio>

上述代碼不須要一行js腳本就能實現音樂播放。當中有三個經常使用的屬性,分別為:音頻源文件,是否自己主動播放以及是否顯示播放器控件。

因為沒有不論什么ui的展現,audio標簽在chrome的默認風格例如以下圖:

能夠看出,一個主要的播放器還包含了顯示當前時間。播放,暫停,快進快退等功能。這些功能都決定了怎樣非常好的實現歌詞同步(興許介紹)。

既然這么easy就就能播放音樂,那作為一項前端的技術。audio標簽在各個瀏覽器中的兼容性又是怎樣的呢?
Browser Compatibility

能夠看出,各大瀏覽器對audio標簽基本功能都支持。僅僅是在細微的特性上表現不一,可是這些主要的功能已經足已做出一個好的播放器。

歌詞

一般標准的lyric文件是由[時間]內容的tag標簽組成,例如以下圖:

為了更精確的展現每一個字在每句歌詞中的時間,又出現了特殊的歌詞形式,例如以下:

這樣的歌詞的格式的最好樣例就是QRC歌詞文件(如QQ音樂播放器):

為了描寫敘述簡單,本文僅以最簡單的lyric格式作為說明。解說怎樣分離歌詞進行歌詞同步。

例如以下,為一首歌曲的歌詞文件:

現對該歌詞文件作一下處理:

  • 1.以行為單位拆分每一句歌詞
  • 2.將沒句歌詞的時間tag和內容分離
  • 3.將時間轉換為分鍾

轉換過程較為簡單,僅僅需一個簡單的正則匹配,步驟例如以下:

分離出來的[時間,內容]能夠與audio當前的播放時間進行對照,若須要顯示相應的歌詞則將該行高亮,同一時候每次更新相應DOM節點的top則可在視覺上達到滾動效果。

制作歌詞ui。

  • 1.定義一個現實歌詞的區域,加入audio控件

  • 2.加入背景圖片,制作標題邊框

  • 3.加入歌詞

到此。歌詞同步以及ui繪制所有完成。

在線Demo

PS:CSDN的markdown樣式太水了,能夠看看以下其它的鏈接。

Blog同步

簡書同步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM