BPM (batidas por minuto) é o pulso de uma faixa. Erre por uma batida e um remix não trava; erre por uma oitava e o seu set de DJ desmorona. Este detector usa autocorrelação do envelope de onsets com correção de erro de oitava para ler o tempo de qualquer arquivo de áudio no navegador. Solte um arquivo, receba um número — tipicamente dentro de ±2 BPM da verdade de campo em material rítmico.
O que a detecção de BPM realmente mede
A detecção de BPM encontra a periodicidade no envelope de energia de um sinal. A abordagem clássica: calcular um RMS de janela curta, tomar a derivada meia-retificada para obter um sinal de onsets e, em seguida, autocorrelacionar para encontrar o período de batida mais provável. Os casos limite incluem tempos que não caem em fronteiras inteiras de frame (174 BPM é notoriamente complicado), músicas com forte ênfase em meia compasso que enganam o detector e o fazem reportar metade do tempo, e músicas sem conteúdo rítmico claro. Mitigamos o caso comum de erro de oitava verificando se o tempo dobrado também tem um pico forte de autocorrelação — se tiver, preferimos a leitura mais rápida, já que o tempo percebido pelo ouvinte costuma estar na faixa de 100-180 BPM.
Como este detector funciona
O áudio é decodificado pela Web Audio API e mixado em mono. Calculamos um envelope RMS a 100 Hz de taxa de frame (passo de 10 ms, janela de 20 ms) e, em seguida, meia-retificamos a primeira diferença para isolar os onsets. A autocorrelação varre os atrasos correspondentes a 60-200 BPM. Após escolher o pico mais forte, aplicamos uma correção de oitava a posteriori: se o meio atraso (= tempo dobrado) tiver um pico em pelo menos 45 % do escolhido, trocamos para a leitura mais rápida. Uma interpolação parabólica em torno do pico escolhido entrega precisão de BPM sub-frame. Tudo roda em TypeScript no navegador sobre Float32Array — sem bibliotecas externas, sem servidor.
Quando usar esta ferramenta
- Beatmatching para sets de DJ e performance ao vivo
- Travar remixes e stems no tempo de uma faixa de referência
- Definir o tempo do projeto da sua DAW antes de importar uma performance gravada
- Conferir samples de bateria e loops para garantir que estão rotulados corretamente
- Checagem rápida de ritmo em uma música em que você não consegue marcar a batida
Perguntas frequentes
- Quão precisa é a detecção?
- Em material ritmicamente claro (a maior parte de pop, dance, hip-hop, rock com bateria), espere ±2 BPM. Em material com percussão fraca ou ausente (orquestral, ambient, baladas acústicas) o algoritmo tem menos onde se segurar e pode reportar metade ou o dobro do tempo. A confiança é reportada ao lado do BPM — uma confiança baixa significa que vale tomar o resultado com cautela.
- Por que às vezes ele reporta metade do BPM esperado?
- A detecção de BPM é um problema intrinsecamente ambíguo quando existe periodicidade em várias taxas relacionadas harmonicamente. Detectamos esse caso e preferimos a leitura mais rápida, mas em músicas muito lentas (60-80 BPM) com subdivisão forte o detector ainda pode escolher o tempo dobrado. Compare com o seu próprio tap-tempo se o resultado parecer estranho.
- Ele lida com músicas de tempo variável?
- Não muito bem. A leitura integrada reflete o tempo médio em toda a faixa. Para músicas com mudanças de tempo seção a seção, um algoritmo de beat-tracking com saída por frame é a ferramenta certa — mas é muito mais pesado e pouco adequado a um utilitário grátis em navegador.
- E se a minha faixa não tem bateria?
- Material acústico / ambient / não percussivo é o caso mais difícil. O envelope de onsets capta os ataques de notas tonais, mas eles são bem mais fracos do que pancadas de bateria. A confiança será baixa e o resultado, pouco confiável. Nesses casos, pode ser melhor inserir o BPM à mão com base na intenção do compositor.
Privacidade
Seu arquivo é analisado inteiramente nesta aba do navegador — decodificado pela Web Audio API, processado por TypeScript do navegador, nunca enviado. Fechar a aba apaga todo o estado de trabalho.