Amostragem e PCM
Como converter uma onda analógica contínua em números discretos — o Teorema de Nyquist, aliasing e por que o CD usa 44.100 amostras por segundo.
Tirar fotos de uma onda
Imagine tirar fotos de um pêndulo oscilando. Se você tira fotos rápido o suficiente, consegue reconstruir o movimento completo. Mas se tira fotos muito devagar, o pêndulo pode estar em posições completamente diferentes a cada foto — e a reconstrução fica errada.
Isso é exatamente o que acontece com áudio digital. O microfone mede a pressão do ar a cada amostra. O Teorema de Nyquist-Shannon diz: para reconstruir perfeitamente uma onda de frequência f, você precisa de pelo menos 2f amostras/segundo. Abaixo disso ocorre aliasing — a onda reconstruída tem uma frequência errada.
Veja o aliasing acontecer
Diminua a taxa de amostragem abaixo de 10 Hz (2× a frequência da onda de 5 Hz). Observe como a linha reconstruída diverge da onda original.
Nyquist e o formato WAV
// Teorema de Nyquist-Shannon // taxa_amostragem >= 2 * frequencia_maxima // Padrões de áudio digital: const CD = "44.100 Hz"; // → máx 22.050 Hz (acima do audível) const DVD = "48.000 Hz"; // → máx 24.000 Hz const HiRes = "192.000 Hz"; // → máx 96.000 Hz (supersônico) const PHONE = "8.000 Hz"; // → máx 4.000 Hz (inteligibilidade da fala) // Aliasing: quando amostramos abaixo do mínimo // Uma onda de 5kHz amostrada a 7kHz parece uma onda de 2kHz // frequencia_alias = |freq - round(freq/sample_rate) * sample_rate| // Anti-aliasing filter: passa-baixa antes de amostrar // Corta tudo acima de sample_rate/2 ANTES da amostragem // para garantir que não haverá aliasing
Estrutura de um arquivo WAV
// Representação de um arquivo WAV (PCM 16-bit, 44100 Hz, estéreo) // Header RIFF (44 bytes) // Offset Size Valor // 0 4 "RIFF" // 4 4 tamanho total - 8 (little-endian) // 8 4 "WAVE" // 12 4 "fmt " // 16 4 16 (tamanho do chunk fmt) // 20 2 1 (PCM = sem compressão) // 22 2 2 (canais: stereo) // 24 4 44100 (taxa de amostragem) // 28 4 176400 (bytes/segundo = 44100 * 2ch * 2bytes) // 32 2 4 (block align = 2ch * 2bytes) // 34 2 16 (bits por amostra) // 36 4 "data" // 40 4 tamanho dos dados de áudio // 44 N AMOSTRAS (L16, R16, L16, R16, ...) // Tamanho de 1 minuto de CD: 44100 * 60 * 2ch * 2bytes = 10.584.000 bytes ≈ 10 MB
Analise áudio real
Mini projeto: use o Web Audio API com AnalyserNode e getFloatTimeDomainData() para capturar amostras do microfone em tempo real. Renderize as amostras como forma de onda em um Canvas atualizado a 60fps.
Projeto principal: implemente detecção de frequência fundamental: capture amostras de áudio, calcule a autocorrelação e encontre o primeiro pico — isso dá a frequência fundamental. Exiba o tom detectado em tempo real (como um tuner de instrumento).
Desafio extra: escreva um gerador de arquivo WAV em JavaScript puro: gere uma senoide de 1 segundo a 440 Hz, empacote no header PCM WAV correto usando ArrayBuffer e DataView, e crie um link de download com URL.createObjectURL(new Blob(...)).
Teste sua intuição
Onde você encontra isso
Telefonia e voz
Chamadas telefônicas tradicionais usam 8.000 Hz (voz humana inteligível até ~4 kHz). VoIP moderno (Zoom, WhatsApp) usa 16.000 Hz (wideband) ou até 48.000 Hz (fullband) para qualidade de voz mais natural. Codecs opus comprimem de 48kHz PCM para 6-510 kbps adaptativo.
Produção de vídeo e cinema
Cinema usa 48.000 Hz como padrão (DCP — Digital Cinema Package). Gravações de campo usam 24-bit/96kHz para ter headroom na edição. O master final é dithered para 24-bit/48kHz antes da distribuição. Dithering adiciona ruído controlado para ocultar artefatos de quantização.
Ultrassom médico
Ultrassom usa ondas sonoras de 2–15 MHz (muito acima do audível). Para amostrar fielmente, os equipamentos usam ADCs a 100–200 MHz de taxa de amostragem. O aliasing que seria inofensivo em áudio pode criar imagens fantasma perigosas em diagnóstico médico.