最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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>





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

分享到微博請遵守國家法律
潍坊市| 辽宁省| 古浪县| 枣阳市| 兴隆县| 黎川县| 咸阳市| 越西县| 宜君县| 绿春县| 龙山县| 灌阳县| 溆浦县| 南靖县| 札达县| 乐昌市| 桂东县| 宜都市| 渭源县| 揭西县| 淮阳县| 金山区| 万盛区| 永泰县| 长岛县| 上饶县| 临泽县| 香港| 察隅县| 丹巴县| 临海市| 鸡西市| 连城县| 陈巴尔虎旗| 萨嘎县| 南京市| 绥化市| 军事| 钦州市| 青浦区| 建湖县|