您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Realtime Audio Visualizations for moe.fm
// ==UserScript== // @name Visible Audio // @version 0.1 // @description Realtime Audio Visualizations for moe.fm // @author woozy // @homepage http://woozy.im/ // @match http://moe.fm/listen/h5* // @grant none // @namespace https://gf.qytechs.cn/users/8206 // ==/UserScript== var raf; var canvas = document.createElement('canvas'); var cctx = canvas.getContext('2d'); canvas.width = 720; canvas.height = 96; var pls = document.getElementById('promotion_ls'); pls.style.textAlign = 'center'; pls.innerHTML = ''; pls.appendChild(canvas); var actx = new AudioContext(); var analyser = actx.createAnalyser(); var bufferLength = analyser.frequencyBinCount; var dataArray = new Uint8Array(bufferLength); analyser.connect(actx.destination); analyser.getByteFrequencyData(dataArray); var prev = undefined; function check() { requestAnimationFrame(check); if (prev != sm2sound._a) { prev = sm2sound._a; window.cancelAnimationFrame(raf); begin(); } } check(); function begin() { var audio = sm2sound._a; var source = actx.createMediaElementSource(audio); source.connect(analyser); function draw() { raf = requestAnimationFrame(draw); analyser.getByteFrequencyData(dataArray); cctx.clearRect(0, 0, canvas.width, canvas.height); cctx.lineWidth = 2; cctx.strokeStyle = 'rgb(0, 0, 0)'; cctx.beginPath(); var sliceWidth = canvas.width * 1.0 / bufferLength; for(var x = 0, i = 0; i < bufferLength; i++) { var y = (1 - dataArray[i] / 256.0) * canvas.height; (i === 0) ? cctx.moveTo(x, y) : cctx.lineTo(x, y); x += sliceWidth; } cctx.stroke(); cctx.closePath(); } draw(); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址