[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/ja/docs/Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API [Back]  [Original]

API - Web API | MDN

MDN Web Docs

View in English Always switch to English

API

API 1

AnalyserNode BaseAudioContext.createAnalyser

js
const audioCtx = new AudioContext();
const analyser = audioCtx.createAnalyser();

js
const source = audioCtx.createMediaStreamSource(stream);
source.connect(analyser);
analyser.connect(distortion);
distortion.connect(audioCtx.destination);

:

AnalyserNode.fftSize 2048 (fft)

AnalyserNode.getFloatFrequencyData() AnalyserNode.getByteFrequencyData() AnalyserNode.getByteTimeDomainData() AnalyserNode.getFloatTimeDomainData()

32 2 3 8 JavaScript Float32Array Uint8Array

2048 fft fft AnalyserNode.frequencyBinCount frequencyBinCount Uint8Array() fft

js
analyser.fftSize = 2048;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);

js
analyser.getByteTimeDomainData(dataArray);

HTML <canvas>

/

Voice-change-O-matic Soledad Penads

js
analyser.fftSize = 2048;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);

js
canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);

draw()

  1. requestAnimationFrame()
  2. FrequencyBinCount x
js
function draw() {
  const drawVisual = requestAnimationFrame(draw);
  analyser.getByteTimeDomainData(dataArray);
  // 
  canvasCtx.fillStyle = "rgb(200 200 200)";
  canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);
  // 
  canvasCtx.lineWidth = 2;
  canvasCtx.strokeStyle = "rgb(0 0 0)";
  canvasCtx.beginPath();
  // 
  const sliceWidth = WIDTH / bufferLength;
  let x = 0;
  for (let i = 0; i < bufferLength; i++) {
    const v = dataArray[i] / 128.0;
    const y = v * (HEIGHT / 2);

    if (i === 0) {
      canvasCtx.moveTo(x, y);
    } else {
      canvasCtx.lineTo(x, y);
    }

    x += sliceWidth;
  }

  // 
  canvasCtx.lineTo(WIDTH, HEIGHT / 2);
  canvasCtx.stroke();
}

draw()

js
draw();

1

[]

Winamp 1 Voice-change-O-matic

clearRect() fft

js
analyser.fftSize = 256;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(bufferLength);

canvasCtx.clearRect(0, 0, WIDTH, HEIGHT);

draw() requestAnimationFrame()

js
function draw() {
  drawVisual = requestAnimationFrame(draw);

  analyser.getByteFrequencyData(dataArray);

  canvasCtx.fillStyle = "rgb(0 0 0)";
  canvasCtx.fillRect(0, 0, WIDTH, HEIGHT);

  // ...
}

barWidth 2.5

barHeight x

js
function draw() {
  // ...
  const barWidth = (WIDTH / bufferLength) * 2.5;
  let barHeight;
  let x = 0;
  // ...
}

for dataArray barHeight barHeight barWidth barHeight / 2 x

HEIGHT - barHeight / 2 0 barHeight / 2

js
function draw() {
  // ...
  for (let i = 0; i < bufferLength; i++) {
    barHeight = dataArray[i] / 2;

    canvasCtx.fillStyle = `rgb(${barHeight + 100} 50 50)`;
    canvasCtx.fillRect(x, HEIGHT - barHeight / 2, barWidth, barHeight);

    x += barWidth + 1;
  }
  // ...
}

draw()

js
draw();

[]


Web Proxy Viewer  |  New URL  |  Original Page