visualizer
This commit is contained in:
		@@ -1024,3 +1024,54 @@ a.id-link:hover:after {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  margin-left: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* loginform */
 | 
			
		||||
body[type='login'] {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  min-height: 100vh;
 | 
			
		||||
}
 | 
			
		||||
.login-form {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  padding: 20px 20px;
 | 
			
		||||
  background: rgba(0, 0, 0, 0.8);
 | 
			
		||||
  border-radius: 10px;
 | 
			
		||||
  border: 1px solid var(--accent);
 | 
			
		||||
}
 | 
			
		||||
.login-form button[type="submit"] {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  margin: 18px 0 9px 0;
 | 
			
		||||
  background: var(--bg);
 | 
			
		||||
  border: 1px solid var(--black);
 | 
			
		||||
  color: var(--white);
 | 
			
		||||
  opacity: 0.6;
 | 
			
		||||
  padding: 8px 20px;
 | 
			
		||||
  border-radius: 0;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
.login-form button[type="submit"]:hover {
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
  opacity: 1;
 | 
			
		||||
}
 | 
			
		||||
.login-form input {
 | 
			
		||||
  background: var(--bg);
 | 
			
		||||
  border: 1px solid var(--black);
 | 
			
		||||
  padding: 5px;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  margin: 6px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* visualizer */
 | 
			
		||||
canvas {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  right: 0;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  pointer-events: none;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -116,4 +116,62 @@
 | 
			
		||||
    xDown = yDown = null;
 | 
			
		||||
  }, false);
 | 
			
		||||
  // </swipe>
 | 
			
		||||
 | 
			
		||||
  // <testzone>
 | 
			
		||||
  if(audioElement = document.querySelector("audio")) {
 | 
			
		||||
    const canvas = document.createElement("canvas");
 | 
			
		||||
    const ctx = canvas.getContext("2d");
 | 
			
		||||
    canvas.width = 1920;
 | 
			
		||||
    canvas.height = 1080;
 | 
			
		||||
 | 
			
		||||
    setTimeout(() => {
 | 
			
		||||
      document.querySelector(".v0ck").insertAdjacentElement("afterbegin", canvas);
 | 
			
		||||
    }, 400);
 | 
			
		||||
 | 
			
		||||
    const audioCtx = new AudioContext();
 | 
			
		||||
    const analyser = audioCtx.createAnalyser();
 | 
			
		||||
    analyser.fftSize = 2048;
 | 
			
		||||
 | 
			
		||||
    const source = audioCtx.createMediaElementSource(audioElement);
 | 
			
		||||
    source.connect(analyser);
 | 
			
		||||
    source.connect(audioCtx.destination);
 | 
			
		||||
 | 
			
		||||
    let data = new Uint8Array(analyser.frequencyBinCount);
 | 
			
		||||
    requestAnimationFrame(loopingFunction);
 | 
			
		||||
 | 
			
		||||
    function loopingFunction() {
 | 
			
		||||
      requestAnimationFrame(loopingFunction);
 | 
			
		||||
      analyser.getByteFrequencyData(data);
 | 
			
		||||
      draw(data);
 | 
			
		||||
    }
 | 
			
		||||
    /*function draw(data) {
 | 
			
		||||
      data = [ ...data ];
 | 
			
		||||
      ctx.clearRect(0, 0, canvas.width, canvas.height);
 | 
			
		||||
      const space = canvas.width / data.length;
 | 
			
		||||
      const sstyle = getComputedStyle(document.body).getPropertyValue("--accent");
 | 
			
		||||
      data.forEach((value, i) => {
 | 
			
		||||
        ctx.beginPath();
 | 
			
		||||
        ctx.moveTo(space * i, canvas.height);
 | 
			
		||||
        ctx.lineTo(space * i, canvas.height - value);
 | 
			
		||||
        ctx.strokeStyle = sstyle;
 | 
			
		||||
        ctx.stroke();
 | 
			
		||||
      });
 | 
			
		||||
    }*/
 | 
			
		||||
    function draw(data) {
 | 
			
		||||
      data = [ ...data ];
 | 
			
		||||
      ctx.clearRect(0, 0, canvas.width, canvas.height);
 | 
			
		||||
      ctx.fillStyle = getComputedStyle(document.body).getPropertyValue("--accent");
 | 
			
		||||
      data.forEach((value, i) => {
 | 
			
		||||
        const percent = value / 256;
 | 
			
		||||
        const height = (canvas.height * percent / 2) - 40;
 | 
			
		||||
        const offset = canvas.height - height - 1;
 | 
			
		||||
        const barWidth = canvas.width / analyser.frequencyBinCount;
 | 
			
		||||
        ctx.fillRect(i * barWidth, offset, barWidth, height);
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
    audioElement.onplay = () => {
 | 
			
		||||
      audioCtx.resume();
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
  // </testzone>
 | 
			
		||||
})();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user