Detector de BPM
Solte uma faixa. Receba o andamento e o momento exato de cada tempo — calculado na sua própria máquina, sem enviar nada.
O seu navegador lê e recodifica o ficheiro. Nenhum pedido o envia para lado nenhum — esta página não tem servidor para onde o enviar.
Perguntas
Meu áudio é enviado para algum lugar?
Não. A análise roda dentro do seu navegador como WebAssembly. O arquivo é lido do disco para a memória e nunca sai pela rede: dá para conferir abrindo a aba de rede, ou desconectando depois que a página carregou.
Qual a precisão?
Usa análise de força de ataques com rastreamento de batidas por programação dinâmica — a mesma abordagem das ferramentas consagradas de recuperação de informação musical e o mesmo código que move o motor de montagem do Life2Film. Em música de pulso estável, acerta dentro de uma batida. Em rubato, gravações ao vivo sem clique ou material muito sincopado, trate o número como ponto de partida.
O que significa «metade ou dobro do andamento»?
O andamento é ambíguo por natureza: uma faixa a 140 BPM também é, corretamente, 70 BPM contada em tempo pela metade. Os detectores escolhem o que for mais forte no sinal. Se o número parecer exatamente o dobro ou a metade, foi isso que aconteceu — e as duas leituras aparecem para você pegar a que precisa.
Posso usar os tempos no meu editor?
É para isso que serve a exportação. EDL é a escolha para DaVinci Resolve ou Premiere: cada tempo chega como um marcador nomeado na linha do tempo. O Final Cut aceita o FCPXML. OTIO funciona em Resolve, Avid e Premiere, e é o certo quando os tempos vão para um pipeline em vez de direto para a linha do tempo. O Audacity lê a exportação de rótulos, e CSV ou JSON cobrem planilhas e scripts.
Por que os quadros por segundo importam?
Os tempos caem em frações de segundo; linhas do tempo contam quadros inteiros. Cada marcador é arredondado para o quadro mais próximo do projeto de destino, então uma grade exportada a 25 fps fica até 20 ms deslocada numa sequência a 30 fps. Ajuste a taxa à do seu projeto e os marcadores caem exatamente onde está a batida. Não afeta CSV nem JSON, que trazem também os segundos brutos.
As outras ferramentas
Integre isto no seu projeto
Finding the tempo and beat grid of a track — the same way this page does it, on the user's machine, with no server. Take the code, or hand the prompt to a coding agent.
const engine = await import('https://life2film.com/wasm/va_wasm.js');
await engine.default({ module_or_path: 'https://life2film.com/wasm/va_wasm_bg.wasm' });
const ctx = new AudioContext();
const buffer = await ctx.decodeAudioData(await file.arrayBuffer());
// Down-mix to mono at 22050 Hz first (OfflineAudioContext), then:
const { bpm, beats } = JSON.parse(engine.detect_beats(mono, 22050, null)); Add beat detection to my project. It must run in the browser with no upload and no API key.
Requirements:
- Use the "life2film-engine" npm package (WebAssembly). detect_beats takes mono f32 PCM, which is
exactly what AudioContext.decodeAudioData gives you.
- Down-mix to mono at 22050 Hz with an OfflineAudioContext before analysing. The onset envelope lives
far below that, so the source rate costs several times the memory and time for an identical answer.
- Tempo is genuinely ambiguous: 140 BPM is also 70 in half time. Show both readings rather than
treating a 2x difference as an error.
- Draw the beats over a waveform so the user can check them, but show a WINDOW of a few seconds, not
the whole track — 400 beats across 1000 pixels is a solid block that proves nothing.
- Let the user play the track with a click on every beat. It is the fastest way to verify a grid.
- Export the grid for editors: EDL for Resolve and Premiere, FCPXML for Final Cut, OTIO for
pipelines, Audacity labels, CSV, JSON. Markers land on whole frames, so ask for the project frame
rate — a grid at 25 fps sits up to 20 ms off in a 30 fps sequence.
Reference implementation: https://life2film.com/tools/bpm-detector/
The engine is documented for agents, and every tool page is available as
markdown by adding .md to its address.