假响应式频谱再测试
<style>#papa { margin: 30px auto 0; padding: 10px; width: 760px; height: 400px; background: linear-gradient(to bottom right,lightblue,tan); box-shadow: 3px 6px 20px #000; border-radius: 6px; position: relative; --tst: .17s; }
#papa h2 { margin: 6px 0; color: snow; font: bold 1.6em sans-serif; text-align: center; text-shadow: 2px 2px 2px #000; }
#mplayer { margin: auto; position: absolute; width: 100%; height: 160px; bottom: 10px; display: flex; justify-content: center; align-items: flex-end; }
.mLine { position: relative; margin: 0 2px 0 0; width: 6px; min-height: 10px; max-height: 200px; background: gray linear-gradient(to top,lightgreen,green,lightgreen); transition: var(--tst); }
.mLine::before, .mLine::after { position: absolute; content: ''; width: 100%; height: 3px; background: snow; top: 0; }
.mLine::after { top: 100%; }
.tMid { margin: 0; padding: 12px 0; text-align: center; }
</style>
<div id="papa">
<h2>假响应式频谱</h2>
<div id="mplayer"></div>
</div>
<p class="tMid"><audio id="aud" src="https://yinpin.s3-us-east-1.ossfiles.com/lyria.mp3" controls></audio></p>
<script>
var ypData = ;
var total = 40, lines = [], idx, len, step;
for(j=0; j < total; j++) {
var el = document.createElement('span');
el.className = 'mLine';
mplayer.appendChild(el);
lines.push(el);
}
plusOrMinus = () => Math.random() > 0.5 ? 1 : -1;
output = (all, num) => num === 0 ?
Array(all).fill(0) :
Array(all).fill(0).map(item => Math.ceil(Math.random() * num + plusOrMinus() * num / 2));
(function update() {
var ar = output(total, aud.paused ? 0 : ypData);
ar.forEach((a,k) => lines.style.height = ar + 'px');
window.requestAnimationFrame(update);
})();
aud.addEventListener('timeupdate', () => {
idx = Math.floor(aud.currentTime / step);
});
aud.addEventListener('canplay', () => {
len = ypData.length;
step = aud.duration / len;
papa.style.setProperty('--tst', step + 's');
});
</script>
代码:<style>
#papa { margin: 30px auto 0; padding: 10px; width: 800px; height: 400px; background: linear-gradient(to bottom right,lightblue,tan); box-shadow: 3px 6px 20px #000; border-radius: 6px; position: relative; --tst: .17s; }
#papa h2 { margin: 6px 0; color: snow; font: bold 1.6em sans-serif; text-align: center; text-shadow: 2px 2px 2px #000; }
#mplayer { margin: auto; position: absolute; width: 100%; height: 160px; bottom: 10px; display: flex; justify-content: center; align-items: flex-end; }
.mLine { position: relative; margin: 0 2px 0 0; width: 6px; min-height: 10px; max-height: 200px; background: gray linear-gradient(to top,lightgreen,green,lightgreen); transition: var(--tst); }
.mLine::before, .mLine::after { position: absolute; content: ''; width: 100%; height: 3px; background: snow; top: 0; }
.mLine::after { top: 100%; }
.tMid { margin: 0; padding: 12px 0; text-align: center; }
</style>
<div id="papa">
<h2>假响应式频谱</h2>
<div id="mplayer"></div>
</div>
<p class="tMid"><audio id="aud" src="https://yinpin.s3-us-east-1.ossfiles.com/lyria.mp3" controls></audio></p>
<script>
var ypData = ;
var total = 40, lines = [], idx, len, step;
for(j=0; j < total; j++) {
var el = document.createElement('span');
el.className = 'mLine';
mplayer.appendChild(el);
lines.push(el);
}
plusOrMinus = () => Math.random() > 0.5 ? 1 : -1;
output = (all, num) => num === 0 ?
Array(all).fill(0) :
Array(all).fill(0).map(item => Math.ceil(Math.random() * num + plusOrMinus() * num / 2));
(function update() {
var ar = output(total, aud.paused ? 0 : ypData);
ar.forEach((a,k) => lines.style.height = ar + 'px');
window.requestAnimationFrame(update);
})();
aud.addEventListener('timeupdate', () => {
idx = Math.floor(aud.currentTime / step);
});
aud.addEventListener('canplay', () => {
len = ypData.length;
step = aud.duration / len;
papa.style.setProperty('--tst', step + 's');
});
</script>欢迎修改代码,若有更逼真的做法,敬请分享,谢谢!
音频波形数据的获取请访问:获取本地音频波形数据 (52qingyin.cn) 马黑黑 发表于 2024-8-23 19:16
代码:欢迎修改代码,若有更逼真的做法,敬请分享,谢谢!
有这么多的数据就不假了{:5_117:} 起个网名好难 发表于 2024-8-23 19:49
有这么多的数据就不假了
还是假的,只取了一个波形数据 马黑黑 发表于 2024-8-23 19:55
还是假的,只取了一个波形数据
要能突破跨域就好了 起个网名好难 发表于 2024-8-23 19:59
要能突破跨域就好了
当前的浏览器策略下,通过JS实现几乎不可能的,除非有这样的空间。之前的棱束链,随便设置一下就可以,现在也不行了,交钱也不行。 我去试一下 马黑黑 发表于 2024-8-23 19:17
音频波形数据的获取请访问:获取本地音频波形数据 (52qingyin.cn)
一直音频数据处理中。。。。。 其实已经很真了,因为有波形数据在,已经很不错了{:4_187:} 小辣椒 发表于 2024-8-23 20:54
一直音频数据处理中。。。。。
点一下左上角“选择音乐”,然后,你知道的 记得原来有个定稿版,还置顶了,刚才在置顶里没找到。后来取消置顶了吧{:4_173:} 红影 发表于 2024-8-23 21:12
记得原来有个定稿版,还置顶了,刚才在置顶里没找到。后来取消置顶了吧
我没动过 马黑黑 发表于 2024-8-23 21:12
点一下左上角“选择音乐”,然后,你知道的
就这样操作的,是不是音乐不能用中文名字? 红影 发表于 2024-8-23 21:00
其实已经很真了,因为有波形数据在,已经很不错了
不一样的。真响应式的,每一条频谱对应的音波数据都是事实获取的,假响应式的,从一个声道的数据中扩展出来 小辣椒 发表于 2024-8-23 21:14
就这样操作的,是不是音乐不能用中文名字?
与中文名无关,都支持的。你换一个浏览器。 马黑黑 发表于 2024-8-23 21:12
我没动过
是这个
https://www.huachaowang.com/forum.php?mod=viewthread&tid=65156&highlight=%D2%F4%C6%B5%B2%A8%D0%CE%CA%FD%BE%DD
是我取消的,你嫌置顶太多了{:4_173:} 马黑黑 发表于 2024-8-23 21:15
不一样的。真响应式的,每一条频谱对应的音波数据都是事实获取的,假响应式的,从一个声道的数据中扩展出 ...
已经能大致模拟了{:4_187:} 马黑黑 发表于 2024-8-23 21:17
与中文名无关,都支持的。你换一个浏览器。
好的,换个百分百 小辣椒 发表于 2024-8-23 21:18
好的,换个百分百
看看行不行,不行的话可能是没缘分。
页:
[1]
2