Detector de BPM
Suelta una pista. Obtén su tempo y el momento exacto de cada tiempo — calculado en tu propio equipo, sin subir nada.
Tu navegador lee y recodifica el archivo. Ninguna petición lo envía a ninguna parte: esta página no tiene servidor al que subirlo.
Preguntas
¿Se sube mi audio a algún sitio?
No. El análisis corre dentro de tu navegador como WebAssembly. El archivo se lee del disco a memoria y nunca sale por la red: puedes comprobarlo abriendo la pestaña de red, o desconectando una vez cargada la página.
¿Qué precisión tiene?
Usa análisis de intensidad de ataques con seguimiento de pulso por programación dinámica, el mismo enfoque que las herramientas consolidadas de recuperación de información musical y el mismo código que mueve el motor de montaje de Life2Film. Con música de pulso estable acierta dentro de un tiempo. Con rubato, grabaciones en directo sin claqueta o material muy sincopado, tómalo como punto de partida.
¿Qué significa «mitad o doble de tempo»?
El tempo es ambiguo por naturaleza: una pista a 140 BPM también es, correctamente, 70 BPM contada a mitad de tiempo. Los detectores eligen lo que más pesa en la señal. Si el número parece justo el doble o la mitad, es eso lo que ha pasado, y se muestran ambas lecturas para que tomes la que necesitas.
¿Puedo usar los tiempos en mi editor?
Para eso está la exportación. EDL es la opción para DaVinci Resolve o Premiere: cada tiempo llega como un marcador con nombre en la línea de tiempo. Final Cut toma el FCPXML. OTIO funciona también en Resolve, Avid y Premiere, y es lo indicado si los tiempos van a una cadena de producción más que directamente a una línea de tiempo. Audacity lee la exportación de etiquetas, y CSV o JSON cubren hojas de cálculo y scripts.
¿Por qué importan los fotogramas por segundo?
Los tiempos caen en fracciones de segundo; las líneas de tiempo cuentan fotogramas enteros. Cada marcador se redondea al fotograma más cercano del proyecto al que va, así que una rejilla exportada a 25 fps quedará hasta 20 ms desplazada en una secuencia a 30 fps. Ajusta la tasa a la de tu proyecto y los marcadores caen justo donde está el tiempo. No afecta a CSV ni JSON, que llevan además los segundos en bruto.
Las demás herramientas
Build this into your own project
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.