国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【教程】純前端做一個歌詞顯示的音樂播放器

2021-05-20 14:37 作者:Ar-Sr-Na  | 我要投稿

節(jié)目:08-1202L/08-1203K:【教程】純前端做一個歌詞顯示的音樂播放器

效果

用到的文件:

Bootstrap 4.6.0 CSS:https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.css

一段音樂及這首歌的lrc歌詞(只要帶時間的都可以,這里用lrc舉例)

瀏覽器

jquery(可選,為了查找元素更方便):https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js

原理及實現(xiàn):

音樂播放

通過html5的<audio>屬性進行播放

這里為了方便不開發(fā)進度條和控制進度的工具,直接用各個瀏覽器渲染的audio標簽

并且寬度設(shè)置為100%

<audio id="audio" src="mp3/Flower - 秋風(fēng)のアンサー.mp3" controls style="width:100%"></audio>

注意,audio要指定一個id,方便后續(xù)獲取

歌曲顯示

自己設(shè)置好

為了美觀,我用Bootstrap的jumbotrom大塊屏

<div class="jumbotron">

<h1 class="display-4">秋風(fēng)のアンサー</h1>

<p class="lead">Flower</p>

</div>

歌詞顯示(核心部分)

預(yù)設(shè)置:

因為LRC是timelrc 的格式,js不能讀取,但js有個很相似的格式:json,因此我們可以把lrc轉(zhuǎn)為json,類似于:

預(yù)設(shè)置:

因為LRC是timelrc 的格式,js不能讀取,但js有個很相似的格式:json,因此我們可以把lrc轉(zhuǎn)為json,類似于:

所以先要處理lrc

用sublime打開lrc

鼠標對準第一個中括號,按住中鍵不放,指針將會一直沿著你鼠標的方向選擇,滑到最底部選中所有時間

Ctrl+C復(fù)制,在Excel里粘貼

最好留兩個單元格計算

分鐘單元格輸入函數(shù):=LEFT(C2,2);C2是你的LRC時間所在單元格,下同

秒數(shù)單元格輸入函數(shù):=RIGHT(C2,5)

這樣分秒就分離了

然后將分鐘+秒變成js能讀取的時間

輸入函數(shù):=分鐘單元格*60+秒鐘單元格

鼠標在單元格右下角下拖快速填充到底

同樣用Sublime,在第一個"]"右中括號那里按住中鍵選擇(注意最好選擇進中鍵,不然對于有些空行的歌詞會復(fù)制不了)

粘貼進Excel

然后替換 ] 為 空

復(fù)制具有時間和歌詞的兩列,去到Excel轉(zhuǎn)json的網(wǎng)站

在線Excel、CSV轉(zhuǎn)JSON格式-BeJSON.com

轉(zhuǎn)換完畢,接下來就是匹配歌詞然后播放了

匹配音頻和歌詞時間點

這部分我想了很久,一直沒辦法找到方法,現(xiàn)在有個問題,我想讓每句播放的時候來個動畫,但是現(xiàn)在刷新頻率太快,各位大佬支個招吧

html里添加個顯示歌詞的元素,我用span,并且用Bootstrap的字體

<span id="lrc" class="lead"></span>


注意,文本要指定一個id,方便后續(xù)獲取

js里有個操作,currentTime

給歌詞json賦值

獲取音頻和文字控件:

要匹配音頻和歌詞時間點,就要不斷判斷和遍歷歌詞數(shù)組

遍歷數(shù)組可以這樣來:

判斷音頻與對應(yīng)歌詞

直接用audio.currentTime與上述遍歷數(shù)組查找lrcjsoni1.time是行不通的,因為他們的時間點不可能完全精確,有0.01ms的誤差都不行

瀏覽器獲取的音頻進度
應(yīng)該對應(yīng)的歌詞

所以只能用模糊搜索

當(dāng) 當(dāng)前時間大于數(shù)組里某個數(shù)組的時間大小時,判定就是該數(shù)組,通過該數(shù)組就能獲取到時間和歌詞從而顯示

當(dāng)音頻播放時不斷執(zhí)行事件:

遍歷歌詞的同時不斷查找匹配歌詞

播放的時候不斷查找,不斷遍歷數(shù)組


如果你用console輸出,就會看到速度非??欤圆贿m合在html創(chuàng)建元素或者document.write,只能用innerHTML不斷刷新元素

前面已經(jīng)講到獲取歌詞元素了,所以直接可以對歌詞操作:

總代碼

Javascript


HTML:

<div?class="jumbotron">?? ?<h1?class="display-4">秋風(fēng)のアンサー</h1>?? ?<p?class="lead">Flower</p>?? ?<span?class="lead"?type="text"?id="lrc"></span>?? ?<br?/>?? ?<audio id="audio"?src="mp3/Flower - 秋風(fēng)のアンサー.mp3"?controls style="width:100%"></audio></div>





【教程】純前端做一個歌詞顯示的音樂播放器的評論 (共 條)

分享到微博請遵守國家法律
仙游县| 龙门县| 四平市| 西充县| 瑞丽市| 共和县| 兰考县| 九江市| 岑巩县| 石泉县| 贡嘎县| 宾川县| 武功县| 吉隆县| 叶城县| 洛川县| 罗平县| 白玉县| 河源市| 舒兰市| 阜城县| 奎屯市| 两当县| 小金县| 扶沟县| 台中市| 青神县| 即墨市| 永仁县| 襄樊市| 宕昌县| 琼结县| 桐梓县| 临泉县| 象州县| 罗田县| 新余市| 永兴县| 梓潼县| 阿巴嘎旗| 秦安县|