可爱老人网

 找回密码
 注册会员
搜索
楼主: 肖燕

学习制作音画《让我们荡起双桨》

[复制链接]
发表于 2025-6-28 09:54 | 显示全部楼层
<style>
#papa { margin: 150px 0 20px calc(50% - 621px); background:#800 url(' ')no-repeat center/cover;width: 1050px; height: 590px;   box-shadow: 3px 3px 6px gray; overflow: hidden; z-index: 1; position: relative; display: grid; place-items: center; }
#mdiv {z-index: 10;
        --size: 0px;
        --color: teal;
        position: relative;
        left: calc(-35% - var(--size) / 2);
        top: 230px;
        width: var(--size);
        height: var(--size);
        display: grid;
        place-items: center;
        animation: rot 8s linear infinite ;
        cursor: pointer;
}
#mdiv::before, #mdiv::after {
        position: absolute;
        content: '';
        width: 0;
        height: 0;
        border-style: solid;
        border-width: calc(var(--size) / 2) calc(var(--size) / 2 - 35px);
        border-color: var(--color) transparent;
       
        border-radius: 100% 100% 100% 100%;
        filter:drop-shadow(#000 1px 0 0)drop-shadow(#000 0 1px 0)drop-shadow(#000 -1px 0 0) drop-shadow(#000 0 -1px  0);
}
#mdiv::after { transform: rotate(90deg) }
@keyframes rot { 100% { transform: rotate(360deg);filter:hue-rotate(360deg); } }
#vid {z-index: 2;
        position: absolute;
        width: 100%;
        height: 100%;
        object-fit: cover;
        -webkit-mask-image: radial-gradient(black 10% ,transparent 90%);
}
#vido {z-index: 1;
        position: absolute;
        width: 100%;
        height: 100%;
        object-fit: cover;
        }
#fullscreen { position: absolute; top: 30px; right:30px;font: normal 2em/0em 楷体;color:#000; opacity: 1; cursor: pointer; z-index: 111}
</style>
<div id="papa">
<div id="mdiv" title=""></div>
<div data-lrc=" " id="lrc" title="歌词显示"> </div>   
<span id="fullscreen">全屏欣赏</span>
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=395611.mp3"                                       autoplay loop></audio>
<video id="vid" src="" autoplay loop muted></video>
<video id="vido" src="[url]https://file.uhsea.com/2506/fd77857fd6feb698ea5640d4d7d7c3e3GB.mp4[/url]" autoplay loop muted></video>
</div>
   
<script>
mdiv.onclick = () => aud.paused ?( aud.play(),vid.play(),vido.play()):(aud.pause(),vid.pause(),vido.pause());
mdiv.style.animationPlayState = aud.paused ? 'paused' : 'running';
aud.addEventListener('playing', () =>mdiv.style.animationPlayState = 'running');
aud.addEventListener('pause', () =>mdiv.style.animationPlayState = 'paused');
let fs = true;
        fullscreen.onclick = () => {
                fs ? (fullscreen.innerText = '退出全屏', papa.requestFullscreen()) : (fullscreen.innerText = '全屏欣赏', document.exitFullscreen());
                fs = !fs;
        };
</script>
<style type="text/css">
#lrc {--state: paused;--motion: cover2;--tt: 2s;--bg: linear-gradient(0deg, #880000, #880000, #880000);
position: absolute;z-index: 6;left: 50%; top: 85%;transform: translate(-50%);font:normal 2em 华文新魏; font-weight:400;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 -1px  0);}
#lrc::before {position: absolute;content: attr(data-lrc);width: 95%; height: 95%;color: transparent;overflow: hidden;white-space: pre;background: var(--bg);clip-path: inset(0 100% 0 0);-webkit-background-clip: text;animation: var(--motion) var(--tt) linear forwards;animation-play-state: var(--state);}
@keyframes cover1{ to { clip-path: inset(0 0 0 0); } }@keyframes cover2 { to { clip-path: inset(0 0 0 0); } }
</style>
<script >
(function() {
/*原始lrc歌词*/
let lrcStr = `[00:00.000] 作词 : 乔羽  作曲:刘炽
[00:05.000] 音画制作:肖燕
[00:12.010]让我们荡起双桨,
[00:16.550]小船儿推开波浪,
[00:20.910]海面倒映着美丽的白塔,
[00:25.390]四周环绕着绿树红墙。
[00:33.190]小船儿轻轻,
[00:36.540]飘荡在水中,
[00:41.230]迎面吹来凉爽的风。
[00:54.500]红领巾迎着太阳,
[00:58.800]阳光洒在海面上,
[01:03.760]水中鱼儿望着我们,
[01:08.360]悄悄地听我们愉快歌唱。
[01:14.280]小船儿轻轻,飘荡在水中,
[01:21.430]迎面吹来了凉爽的风。
[01:31.430]
[01:34.430]做完了一天的功课,我们来尽情欢乐。
[01:44.430]我问你亲爱的伙伴,谁给我们安排下幸福的生活?
[01:55.430]小船儿轻轻,飘荡在水中,
[02:03.430]迎面吹来了凉爽的风。
`;
/*变量 :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[j] = parseFloat((ar[j+1][0] - ar[j][0]).toFixed(1));}
let aver = parseInt(tmpAr.reduce((a,b) => a + b) / (tmpAr.length - 1)) + averAdd;
tmpAr.push(aver);
tmpAr.forEach((item,key) => {ar[key][2] = item > aver ? aver : item; });
return ar;};
/*函数 :从原始lrc歌词获取信息并存入 n*3 数组*/
let getLrcAr = (text) => {
       let lrcAr = [];
        let calcRule = [60,1,0.001];
       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[z] * calcRule[z];
                                       ar[0] = [parseFloat(sec.toFixed(2)), geci];
                                       lrcAr.push(ar[0]);
                                }
                       }
                }
        }
        lrcAr.sort((a,b)=> a[0] - b[0]);
        return(lrcTime(lrcAr));
};
/*函数 :模拟显示同步歌词*/
let showLrc = (time) => {
        let name = mFlag ? 'cover1' : 'cover2';
       lrc.innerHTML = lrcAr[mKey][1];
        lrc.dataset.lrc = lrcAr[mKey][1];
        lrc.style.setProperty('--motion', name);
        lrc.style.setProperty('--tt', time + 's');
        lrc.style.setProperty('--state', 'running');
        mKey += 1;
       mFlag = !mFlag;
};
/*函数 :处理当前歌词索引 mKey*/
let calcKey = () => {
        for (j = 0; j < lrcAr.length; j++) {
                if (aud.currentTime <= lrcAr[j][0]) {
                        mKey = j - 1;
                        break;
               }
      }
       if (mKey < 0) mKey = 0;
        if (mKey > lrcAr.length - 1) mKey = lrcAr.length - 1;
       let time = lrcAr[mKey][2] - (aud.currentTime - lrcAr[mKey][0]);
        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 mState = () => aud.paused ? (lrc.style.setProperty('--state','paused'),mdiv.style.animationPlayState = 'paused') : (lrc.style.setProperty('--state','running'),mdiv.style.animationPlayState = 'running');
/*监听播放进度*/
aud.addEventListener('timeupdate', () => {
        for (j = 0; j < lrcAr.length; j++) {
                if (aud.currentTime >= lrcAr[j][0]) {
                        cKey = j;
                        if (mKey === j) showLrc(lrcAr[j][2]);
         else continue;
       }
    }
});
aud.addEventListener('pause', () => mState());/*监听暂停事件*/
aud.addEventListener('play', () => mState());/*监听播放事件*/
aud.addEventListener('seeked', () => calcKey());/*监听查询事件*/
let lrcAr = getLrcAr(lrcStr); /*获得歌词数组*/
})();
</script>
</td></tr></table></td></tr></table>

发表于 2025-6-28 09:56 | 显示全部楼层

肖燕,把红色的代码去掉,页面就正常了。
 楼主| 发表于 2025-6-28 10:24 | 显示全部楼层
静悟 发表于 2025-6-28 09:56
肖燕,把红色的代码去掉,页面就正常了。

我将您发送的这些代码另起一帖上传,有歌词、歌声,没有画面。去掉红色代码依然如故。不知什么原因?
 楼主| 发表于 2025-6-28 10:25 | 显示全部楼层
静悟 发表于 2025-6-28 09:56
肖燕,把红色的代码去掉,页面就正常了。

您将代码发在消息里我再试试。
发表于 2025-6-28 10:46 | 显示全部楼层
美好的童年在脑海回放,嘴角上翘。
发表于 2025-6-28 11:40 | 显示全部楼层
肖燕 发表于 2025-6-28 10:24
我将您发送的这些代码另起一帖上传,有歌词、歌声,没有画面。去掉红色代码依然如故。不知什么原因?

好的,其实系统另加了代码造成的
发表于 2025-6-28 12:15 | 显示全部楼层
好熟悉而亲切的旋律,好熟悉而难忘的画面!肖燕老师好制作!
发表于 2025-6-28 12:15 | 显示全部楼层
肖燕老师的这几个素材图片生成的不错,看得出你下功夫了。
 楼主| 发表于 2025-6-28 12:19 | 显示全部楼层
听柳 发表于 2025-6-28 12:15
好熟悉而亲切的旋律,好熟悉而难忘的画面!肖燕老师好制作!

谢谢柳版的到访点评。我就是特别喜欢这首歌曲,听到它的旋律就会兴奋开心。制作它,也是希望它能给大家带来快乐。
发表于 2025-6-28 12:22 | 显示全部楼层
肖燕 发表于 2025-6-28 12:19
谢谢柳版的到访点评。我就是特别喜欢这首歌曲,听到它的旋律就会兴奋开心。制作它,也是希望它能给大家带 ...

我也特别喜欢这首歌,一听到这首歌除了会不由自主地跟着唱,甚至还会恍惚之中,感觉自己正戴着红领巾在上课,在写作业,在戏水,在和小伙伴们玩耍。

点评

说得极是。我也是这样。有人就说我有一颗童心。  发表于 2025-6-28 13:07
        
下一页 发布主题 快速回复

手机版|公众号|小黑屋|可爱老人网

GMT+8, 2025-10-14 15:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表