镇命歌(简单示波器演示)
<style>#papa { margin: 0 0 0 calc(50% - 593px); width: 1024px; height: 640px; background: gray url('https://638183.freep.cn/638183/t22/webp/vmg.webp') no-repeat center/cover; box-shadow: 3px 3px 20px #000; display: grid; place-items: center; position: relative; z-index: 1; }
#papa::before { position: absolute; content: '镇命歌'; left: 30px; top: 15px; font: bold 2.4em sans-serif; color: #000; text-shadow: 2px 2px 3px #eee; }
#mplayer { position: absolute; top: 0; left: calc(50% - 50px); cursor: pointer; }
</style>
<div id="papa">
<canvas id="mplayer"></canvas>
<audio id="aud" src="http://www.kumeiwp.com/sub/filestores/2022/12/15/354ddd17871b3b8749a5eb348f25898e.mp3" autoplay></audio>
</div>
<script>
(function() {
ypData = ;
let total = 120,idx = 0;
let ctx = mplayer.getContext('2d');
let w = mplayer.width = 400, h = mplayer.height = 100;
let slice = w / total, vmax = Math.max.apply(null, ypData);
aud.loop = false;
ctx.strokeStyle = 'hsla(0, 80%, 90%, .66)';
ctx.fillStyle = 'hsla(0, 70%, 95%, .75)';
ctx.font = '14px sans-serif';
ctx.shadowOffsetX = ctx.shadowOffsetY = 1;
ctx.shadowBlur = 1;
ctx.shadowColor = '#000';
ctx.fillText('play', 100, 50);
mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();
aud.addEventListener('ended', () => { idx = 0; aud.play(); });
aud.addEventListener('timeupdate', () => {
draw();
idx ++;
if(idx > ypData.length - 1) idx = 0;
});
let draw = () => {
let ar = Array(total).fill('0').map( (v,k) => Math.random() * (ypData * h / vmax));
ctx.clearRect(0,0,w,h);
ctx.beginPath();
Array.from({length: total}).forEach((v,k) => ctx.lineTo(slice*k, h - ar));
ctx.stroke();
ctx.fillText(toMin(aud.currentTime) + ' / ' + toMin(aud.duration), 10, 30);
}
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;};
})();
</script>
代码
<style>
#papa { margin: 0 0 0 calc(50% - 593px); width: 1024px; height: 640px; background: gray url('https://638183.freep.cn/638183/t22/webp/vmg.webp') no-repeat center/cover; box-shadow: 3px 3px 20px #000; display: grid; place-items: center; position: relative; z-index: 1; }
#papa::before { position: absolute; content: '镇命歌'; left: 30px; top: 15px; font: bold 2.4em sans-serif; color: #000; text-shadow: 2px 2px 3px #eee; }
#mplayer { position: absolute; top: 0; left: calc(50% - 50px); cursor: pointer; }
</style>
<div id="papa">
<canvas id="mplayer"></canvas>
<audio id="aud" src="http://www.kumeiwp.com/sub/filestores/2022/12/15/354ddd17871b3b8749a5eb348f25898e.mp3" autoplay></audio>
</div>
<script>
(function() {
ypData = ;
let total = 120,idx = 0;
let ctx = mplayer.getContext('2d');
let w = mplayer.width = 400, h = mplayer.height = 100;
let slice = w / total, vmax = Math.max.apply(null, ypData);
aud.loop = false;
ctx.strokeStyle = 'hsla(0, 80%, 90%, .66)';
ctx.fillStyle = 'hsla(0, 70%, 95%, .75)';
ctx.font = '14px sans-serif';
ctx.shadowOffsetX = ctx.shadowOffsetY = 1;
ctx.shadowBlur = 1;
ctx.shadowColor = '#000';
ctx.fillText('play', 100, 50);
mplayer.onclick = () => aud.paused ? aud.play() : aud.pause();
aud.addEventListener('ended', () => { idx = 0; aud.play(); });
aud.addEventListener('timeupdate', () => {
draw();
idx ++;
if(idx > ypData.length - 1) idx = 0;
});
let draw = () => {
let ar = Array(total).fill('0').map( (v,k) => Math.random() * (ypData * h / vmax));
ctx.clearRect(0,0,w,h);
ctx.beginPath();
Array.from({length: total}).forEach((v,k) => ctx.lineTo(slice*k, h - ar));
ctx.stroke();
ctx.fillText(toMin(aud.currentTime) + ' / ' + toMin(aud.duration), 10, 30);
}
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;};
})();
</script>
不要被长串长串的 ybData 变量值吓倒,那个用工具制作后不用管,无视它即可。它是示波器运行的依据,是歌曲声音信息记录,如果不需要相对自然一点的示波响应效果,可以用随机数代替。 这个模拟的简易示波器用 canvas 画布制作,也可以用 span 标签模拟,用画布更省事 上班去了 这个就是上次那个圆环播放器里面的那个吧,你曾叫它心电图的那个{:4_173:} 漂亮,像是鹦鹉嘴里吐出来的,漂亮{:4_187:} 马黑黑 发表于 2022-12-15 08:28
上班去了
上班前这么点时间就能出新效果,黑黑厉害{:4_199:} 这一大片代码把我给看晕了。{:4_201:} 梦油 发表于 2022-12-15 10:07
这一大片代码把我给看晕了。
忽略它 红影 发表于 2022-12-15 09:32
上班前这么点时间就能出新效果,黑黑厉害
一般般 红影 发表于 2022-12-15 09:26
这个就是上次那个圆环播放器里面的那个吧,你曾叫它心电图的那个
有所同有所不同 红影 发表于 2022-12-15 09:32
漂亮,像是鹦鹉嘴里吐出来的,漂亮
还可以一看 又一个新效果,好看 侃大山 发表于 2022-12-15 16:44
又一个新效果,好看
这个相对简单 马黑黑 发表于 2022-12-15 13:26
忽略它
原因就是因为我不懂。 看看很漂亮,但不是我的菜{:4_170:} 辫子哥哥 发表于 2022-12-15 19:54
看看很漂亮,但不是我的菜
好菜共享 梦油 发表于 2022-12-15 19:48
原因就是因为我不懂。
不懂可以无视{:4_170:}