Ondas sonoras e áudio digital
O que é frequência, amplitude, timbre — e como um computador representa som como uma sequência de números em vez de uma onda de ar.
Som é vibração, vibração é número
Som é variação de pressão no ar — o alto-falante empurra moléculas de ar para a frente e para trás, criando ondas que chegam ao tímpano. A frequência (Hz) determina o tom: 440 Hz é o Lá4, 880 Hz é uma oitava acima. A amplitude determina o volume.
Para um computador, som é um array de números — cada número representa a amplitude da onda naquele instante. Um segundo de áudio CD tem 44.100 números (amostras), cada um com 16 bits de precisão. Esse formato é chamado PCM (Pulse Code Modulation) — é o que está num arquivo WAV ou numa faixa de CD.
Gerador de formas de onda
Escolha uma forma de onda, ajuste frequência e amplitude, e clique em Tocar som para ouvir usando o Web Audio API.
PCM e superposição de ondas
// Som como array de floats (PCM — Pulse Code Modulation) const sampleRate = 44100; // amostras por segundo const duration = 1; // 1 segundo const freq = 440; // Lá4 = 440 Hz // Gera uma senoide de 440 Hz const buffer = new Float32Array(sampleRate * duration); for (let i = 0; i < buffer.length; i++) { const t = i / sampleRate; // tempo em segundos buffer[i] = Math.sin(2 * Math.PI * freq * t); } // Web Audio API: toca o buffer const ctx = new AudioContext(); const ab = ctx.createBuffer(1, buffer.length, sampleRate); ab.copyToChannel(buffer, 0); const src = ctx.createBufferSource(); src.buffer = ab; src.connect(ctx.destination); src.start();
Timbre e harmônicos
// Superposição: somando ondas para criar timbres // Onda quadrada = senoide fundamental + harmônicos ímpares function squareWave(t, freq, harmonics = 10) { let sum = 0; for (let k = 1; k <= harmonics; k++) { const h = 2*k - 1; // 1, 3, 5, 7... sum += Math.sin(2 * Math.PI * h * freq * t) / h; } return (4 / Math.PI) * sum; } // Por que instrumentos musicais têm timbre diferente? // Cada instrumento tem um padrão único de harmônicos (loudness por harmônico) // Flauta: poucos harmônicos → som puro // Violino: muitos harmônicos → som rico e complexo // Piano: transiente forte + decaimento de harmônicos variável
Sintetizador com Web Audio
Mini projeto: use o Web Audio API para criar um teclado virtual de uma oitava (C4 a C5). Cada tecla toca um OscillatorNode com a frequência correta. Calcule as frequências com 440 * 2^((n-69)/12) onde n é o número MIDI da nota.
Projeto principal: implemente envelope ADSR: ao pressionar uma tecla, a amplitude sobe em attack ms, desce ao nível sustain em decay ms, e ao soltar a tecla, cai a zero em release ms. Use gain.gain.linearRampToValueAtTime().
Desafio extra: crie um arpejador — toque uma progressão de acordes automaticamente, variando a ordem das notas (up, down, random). Use AudioContext.currentTime para agendar os eventos sonoros com precisão de sample.
Teste sua intuição
Onde você encontra isso
Síntese e processamento de áudio
DAWs (Ableton, Logic Pro, FL Studio) trabalham com PCM internamente. Plugins VST são filtros digitais que modificam as amostras em tempo real — equalizadores mudam amplitudes de harmônicos, reverb adiciona eco, distorção introduz novos harmônicos.
Reconhecimento de voz
Assistentes como Siri e Google Assistant convertem o PCM do microfone em espectrograma de frequências (via FFT), que é então processado por uma rede neural para identificar palavras. O modelo "ouve" padrões espectrais, não formas de onda diretamente.
MP3 e codecs de áudio
MP3 usa um modelo perceptual do ouvido humano para descartar sons que não ouvimos: frequências mascaradas por sons mais altos próximos, sons muito breves, frequências acima de 16kHz. O resultado usa 10-15% do espaço do WAV sem perda perceptível de qualidade.