Web Foundations

Web Audio API

Audio processing, sound synthesis, effects, and music applications.

Advertisement

Web Audio API

Audio processing, sound synthesis, effects, and music applications.

Overview

Web Audio API provides powerful audio processing capabilities.

Key Concepts

  • AudioContext — Audio processing environment
  • Audio Nodes — Connectable audio processors
  • Oscillators — Generate audio signals
  • Effects — Filters, gain, reverb
  • Analysis — Visualize audio data

Code Examples

<button id="play">Play Tone</button>
<button id="stop">Stop</button>
<canvas id="visualizer" width="800" height="200"></canvas>

<script>
let audioCtx, oscillator, analyser;

document.getElementById('play').addEventListener('click', () => {
  audioCtx = new AudioContext();
  analyser = audioCtx.createAnalyser();
  
  oscillator = audioCtx.createOscillator();
  oscillator.type = 'sine';
  oscillator.frequency.setValueAtTime(440, audioCtx.currentTime);
  
  const gainNode = audioCtx.createGain();
  gainNode.gain.setValueAtTime(0.5, audioCtx.currentTime);
  
  oscillator.connect(gainNode);
  gainNode.connect(analyser);
  analyser.connect(audioCtx.destination);
  
  oscillator.start();
  visualize();
});

document.getElementById('stop').addEventListener('click', () => {
  oscillator?.stop();
});

function visualize() {
  const canvas = document.getElementById('visualizer');
  const ctx = canvas.getContext('2d');
  const bufferLength = analyser.frequencyBinCount;
  const dataArray = new Uint8Array(bufferLength);

  function draw() {
    requestAnimationFrame(draw);
    analyser.getByteFrequencyData(dataArray);
    
    ctx.fillStyle = 'rgb(0, 0, 0)';
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    
    const barWidth = (canvas.width / bufferLength) * 2.5;
    let x = 0;
    
    for (let i = 0; i < bufferLength; i++) {
      const barHeight = (dataArray[i] / 255) * canvas.height;
      
      ctx.fillStyle = `rgb(${barHeight + 100}, 50, 50)`;
      ctx.fillRect(x, canvas.height - barHeight, barWidth, barHeight);
      
      x += barWidth + 1;
    }
  }
  
  draw();
}
</script>

Practice

Build a simple synthesizer with visualizer using Web Audio API.

Advertisement