亚伦影音工作室 发表于 2024-2-2 18:04

原生态同步歌词播放器测试【马黑老师源码改编】

本帖最后由 亚伦影音工作室 于 2024-2-27 21:27 编辑 <br /><br /><style>
#papa { margin: 0 0 0 calc(50% - 693px); width: 1164px; height: 640px; background: url('https://638183.freep.cn/638183/t23/webp1/vmlm.webp') no-repeat center/cover; box-shadow: 0px 0px 2px #000; position: relative; z-index: 1; display: grid; place-items: center;overflow: hidden; }
#vid { position: absolute; width: 100%; height: 100%; top:0%; object-fit: cover; pointer-events: none;opacity: 1;z-index: -1; transition: 0.1s all ease;}
#mplayer { position: absolute; top: 500px; width: 80px; height: 80px; background: url('https://pic.imgdb.cn/item/64a52b6c1ddac507cc5e4d9d.png') no-repeat center/cover; cursor: pointer; animation: rot 6s infinite linear ; }
@keyframes rot { to { transform: rotate(1turn); } }
#lrc { --motion: cover2; --tt: 1s; --bg: linear-gradient(90deg, #F80F03 9%,rgba(46, 246, 1, 0.99) 29%,#0823FB 55%,#00FF16 75%,#F50701 91%); position: absolute; top: 15px; font: bold 2.4em sans-serif; color:#000080; white-space: pre; -webkit-background-clip: text; filter:drop-shadow(#FFFFFF 1px 0 0)drop-shadow(#FFFFFF 0 1px 0)drop-shadow(#FFFFFF -1px 0 0) drop-shadow(#FFFFFF 0 -1px0); pointer-events: none; z-index: 9; font:normal 3em 华文新魏; }
      #lrc::before { position: absolute; content: attr(data-lrc); width: 0%; height: 100%; color: transparent; border-bottom: 6px dotted #880000; overflow: hidden; white-space: pre; background: var(--bg);background-clip: text; -webkit-background-clip: text; animation: var(--motion) var(--tt) linear forwards var(--state); }
@keyframes cover1 { from { width: 0%; }to { width: 100%; } }
      @keyframes cover2 { from { width: 0%; }to { width: 100%; } }
</style>

<div id="papa">
<video id="vid"src="https://video-js.51miz.com/preview/video/00/00/17/59/V-175990-3C1D4D70.mp4" muted autoplay loop></video>
        <div id="lrc" data-lrc="HuaChao LRC">HuaChao LRC</div>
        <span id="mplayer" title="播放/暂停"></span>
</div>
<audio autoplay="" id="aud" loop="" src="https://mp3.t57.cn:7087/kwlink_d.php?id=336121116.mp3">&nbsp;</audio>

<script >
(function() {
/*原始lrc歌词*/
let lrcStr = `我是真情你是假爱 - 赵洋
词:关连宇
曲:赵洋
编曲:GK康康
和声:阿萨
混音:冯鑫阳
词曲提供:娱当家
出品人:亚伦
制作发行:音画传媒
源码设计:马黑黑老师
直到现在我还是不明白
当初你为什么左右摇摆
我们曾幻想的美好未来
最后石沉大海笼罩阴霾
我的心载不动太多悲哀
承诺也经不起太长等待
你可知我对你情深似海
眼含热泪将痴和怨掩埋
我是真的情 你是假的爱
给你的真心却换来伤害
忘不了你的好还有你的坏
你的身影还在我眼前徘徊
我是真的情 你是假的爱
对你的关怀只换来活该
其实我并不是真的想离开
只是痛苦和无奈实在难挨
我的心载不动太多悲哀
承诺也经不起太长等待
你可知我对你情深似海
眼含热泪将痴和怨掩埋
我是真的情 你是假的爱
给你的真心却换来伤害
忘不了你的好还有你的坏
你的身影还在我眼前徘徊
我是真的情 你是假的爱
对你的关怀只换来活该
其实我并不是真的想离开
只是痛苦和无奈实在难挨
我是真的情 你是假的爱
给你的真心却换来伤害
忘不了你的好还有你的坏
你的身影还在我眼前徘徊
我是真的情 你是假的爱
对你的关怀只换来活该
其实我并不是真的想离开
只是痛苦和无奈实在难挨`;

/*变量 :mKey - 当前歌词索引;mFlag :调用关键帧动画索引;averAdd :平均值补偿*/
let mKey = 0, mFlag = true, averAdd = 0.3;

/*函数 :获取每句歌词用时,歌词用时若超过平均值则取平均值,最后一句歌词则取平均值*/
let lrcTime = (ar) => {
      let tmpAr = [];
      for(j = 0; j <ar.length - 1; j ++) {
                if(j !== ar.length - 1) tmpAr = parseFloat((ar - ar).toFixed(1));
      }
      let aver = parseInt(tmpAr.reduce((a,b) => a + b) / (tmpAr.length - 1)) + averAdd;
      tmpAr.push(aver);
      tmpAr.forEach((item,key) => {
                ar = item > aver ? aver : item;
      });
      return ar;
};

/*函数 :从原始lrc歌词获取信息并存入 n*3 数组*/
let getLrcAr = (text) => {
      let lrcAr = [];
      let calcRule = ;
      for(x of text.split('\n')) {
                let ar = [];
                let re = /\d+[\.:]\d+([\.:]\d+)?/g;
                let geci = x.replace(re,'');
                if(geci) {
                        geci = geci.replace(/[\[\]\'\"\t,]s?/g,'');
                        let time = x.match(re);
                        if(time != null) {
                              for(y of time) {
                                        let tmp = y.match(/\d+/g);
                                        let sec = 0;
                                        for(z in tmp) sec += tmp * calcRule;
                                        ar = ;
                                        lrcAr.push(ar);
                              }
                        }
                }
      }
      lrcAr.sort((a,b)=> a - b);
      return(lrcTime(lrcAr));
};



/*函数 :处理当前歌词索引 mKey*/
let calcKey = () => {
      for (j = 0; j < lrcAr.length; j++) {
                if (aud.currentTime <= lrcAr) {
                        mKey = j - 1;
                        break;
                }
      }
      if (mKey < 0) mKey = 0;
      if (mKey > lrcAr.length - 1) mKey = lrcAr.length - 1;
      let time = lrcAr - (aud.currentTime - lrcAr);
      showLrc(time);
};

/*格式化时间信息*/
let toMin = (val) => {
      if (!val) return '00:00';
      val = Math.floor(val);
      let min = parseInt(val / 60),
      sec = parseFloat(val % 60);
      if (min < 10) min = '0' + min;
      if (sec < 10) sec = '0' + sec;
      return min + ':' + sec;
}
/*函数 :模拟显示同步歌词*/
let showLrc = (time) => {
      let name = mFlag ? 'cover1' : 'cover2';
      lrc.innerHTML = lrcAr;
      lrc.dataset.lrc = lrcAr;
      lrc.style.setProperty('--motion', name);
      lrc.style.setProperty('--tt', time + 's');
      lrc.style.setProperty('--state', 'running');
      mKey += 1;
      mFlag = !mFlag;
};
/*函数 :关键帧动画状态切换*/
let mState = () => aud.paused ? (lrc.style.setProperty('--state','paused'),mplayer.style.animationPlayState = 'paused') : (lrc.style.setProperty('--state','running'),mplayer.style.animationPlayState = 'running');

/*监听播放进度*/
aud.addEventListener('timeupdate', () => {
      for (j = 0; j < lrcAr.length; j++) {
                if (aud.currentTime >= lrcAr) {
                        cKey = j;
                        if (mKey === j) showLrc(lrcAr);
                        else continue;
                }
      }
});
aud.addEventListener('pause', () => mState());/*监听暂停事件*/
aud.addEventListener('play', () => mState());/*监听播放事件*/
aud.addEventListener('seeked', () => calcKey());/*监听查询事件*/
let lrcAr = getLrcAr(lrcStr); /*获得歌词数组*/
})();

mplayer.onclick = (e) => { e.stopPropagation(); aud.paused ?( aud.play(),vid.play() ):( aud.pause(),vid.pause()); }
</script>

红影 发表于 2024-2-2 19:25

亚伦老师这么快就做出来了呢。场景很大气,真漂亮{:4_187:}

红影 发表于 2024-2-2 19:25

一键全控。非常精美的制作{:4_199:}

樵歌 发表于 2024-2-2 19:44

精彩制作!

醉美水芙蓉 发表于 2024-2-2 23:54

挑兮达兮 发表于 2024-2-5 21:51

好美呀!
页: [1]
查看完整版本: 原生态同步歌词播放器测试【马黑老师源码改编】