BPM Bulucu
Bir parça bırakın. Temposunu ve her vuruşun tam zamanını alın — kendi makinenizde hesaplanır, hiçbir yere yüklenmeden.
Dosyayı sizin tarayıcınız okur ve yeniden kodlar. Hiçbir istek onu bir yere göndermez — bu sayfanın yükleme yapacağı bir sunucu yok.
Sorular
Sesim bir yere yükleniyor mu?
Hayır. Çözümleme tarayıcınızın içinde WebAssembly olarak çalışır. Dosya diskten belleğe okunur ve ağ üzerinden hiç çıkmaz: ağ sekmesini açarak ya da sayfa yüklendikten sonra bağlantıyı keserek doğrulayabilirsiniz.
Ne kadar isabetli?
Atak gücü çözümlemesini dinamik programlamayla vuruş takibiyle birlikte kullanır — yerleşik müzik bilgisi erişimi araçlarındaki yaklaşımın ve Life2Film'in kurgu motorunu çalıştıran kodun aynısı. Nabzı düzenli müzikte bir vuruş içinde isabet eder. Rubatoda, metronomsuz canlı kayıtlarda ya da yoğun senkoplu malzemede sayıyı bir başlangıç noktası sayın.
«Yarım ya da iki katı tempo» ne demek?
Tempo doğası gereği belirsizdir: 140 BPM'lik bir parça, yarım zamanda sayıldığında doğru biçimde 70 BPM'dir de. Bulucular sinyalde hangisi güçlüyse onu seçer. Sayı tam iki katı kadar yanlış geliyorsa olan budur ve ihtiyacınız olanı alabilmeniz için iki okuma da gösterilir.
Vuruşları kurgu programımda kullanabilir miyim?
Dışa aktarma tam da bunun için. DaVinci Resolve ya da Premiere için EDL seçin: her vuruş zaman çizelgesine adlandırılmış bir işaret olarak gelir. Final Cut FCPXML alır. OTIO da Resolve, Avid ve Premiere'de çalışır ve vuruşlar doğrudan zaman çizelgesi yerine bir üretim hattına gidiyorsa doğru seçimdir. Audacity etiket dışa aktarımını okur; CSV ve JSON ise tabloları ve betikleri karşılar.
Kare hızı neden önemli?
Vuruşlar saniyenin kesirlerine düşer; zaman çizelgeleri ise tam kare sayar. Her işaret, gideceği projenin en yakın karesine yuvarlanır, dolayısıyla 25 fps'de dışa aktarılmış bir ızgara 30 fps'lik bir dizide 20 ms'ye kadar kayar. Hızı projenizinkine ayarlayın, işaretler tam vuruşun olduğu yere otursun. CSV ve JSON'u etkilemez; onlarda ham saniyeler de vardır.
Diğer araçlar
Kendi projenize ekleyin
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.