BPM (ударов в минуту) — это пульс трека. Промахнётесь на один удар — ремикс не «защёлкнется»; промахнётесь на октаву — DJ-сет рассыплется. Этот детектор использует автокорреляцию огибающей онсетов с поправкой на октавную ошибку, чтобы прочитать темп любого аудиофайла прямо в вашем браузере. Бросайте файл — получаете число, обычно с точностью до ±2 BPM на ритмичном материале.
Что на самом деле измеряет детекция BPM
Детекция BPM ищет периодичность в энергетической огибающей сигнала. Классический подход: посчитать RMS на коротком окне, взять полуволновое выпрямление производной, чтобы получить сигнал онсетов, и автокоррелировать его, отыскивая наиболее вероятный период удара. Среди сложных случаев — темпы, не попадающие на целочисленные границы кадров (174 BPM известны капризностью), треки с сильным акцентом на полтакта, заставляющим детектор выдавать половину темпа, и треки без явной ритмической составляющей. Распространённую октавную ошибку мы смягчаем: проверяем, есть ли сильный пик автокорреляции и на удвоенном темпе — если есть, выбираем более быстрое чтение, ведь субъективно воспринимаемый темп обычно лежит в диапазоне 100-180 BPM.
Как работает этот детектор
Аудио декодирует Web Audio API и сводит в моно. Мы считаем RMS-огибающую с частотой кадров 100 Hz (шаг 10 ms, окно 20 ms), потом полуволной выпрямляем первую разность, чтобы выделить онсеты. Автокорреляция проходит по задержкам, соответствующим 60-200 BPM. После выбора самого сильного пика применяем апостериорную октавную поправку: если на полузадержке (= удвоенный темп) пик не ниже 45 % от выбранного, переключаемся на более быстрое чтение. Параболическая интерполяция вокруг выбранного пика даёт BPM с подкадровой точностью. Всё работает на TypeScript в браузере поверх Float32Array — без внешних библиотек, без сервера.
Когда пригодится этот инструмент
- Битматчинг для DJ-сетов и живых выступлений
- Подгонка ремиксов и стемов к темпу референсного трека
- Установка темпа проекта в DAW перед импортом записанного дубля
- Аудит барабанных сэмплов и лупов, чтобы убедиться в правильной разметке
- Быстрая проверка ритма в треке, к которому не получается сразу прихлопать
Частые вопросы
- Насколько точна детекция?
- На ритмически ясном материале (большая часть попа, дэнса, хип-хопа, рок с барабанами) ожидайте ±2 BPM. На материале со слабой или отсутствующей перкуссией (оркестр, эмбиент, акустические баллады) алгоритму не за что зацепиться, и он может сообщить половину или удвоенный темп. Рядом с BPM выводится уверенность — если она низкая, относитесь к результату осторожно.
- Почему иногда выдаёт половину ожидаемого BPM?
- Детекция BPM — задача с врождённой неоднозначностью, когда периодичность есть на нескольких гармонически связанных скоростях. Этот случай мы распознаём и предпочитаем более быстрое чтение, но на очень медленных треках (60-80 BPM) с сильным дроблением детектор всё равно может выбрать удвоенный темп. Сравните с собственным tap-tempo, если результат кажется странным.
- Справляется ли он с треками с переменным темпом?
- Не очень. Интегрированное чтение отражает средний темп по всему треку. Для треков, где темп меняется от секции к секции, нужный инструмент — алгоритм beat-tracking с покадровым выходом, но он намного тяжелее и плохо подходит к бесплатной браузерной утилите.
- Что если в моём треке нет барабанов?
- Акустический / эмбиент / неперкуссионный материал — самый сложный случай. Огибающая онсетов улавливает атаки тональных нот, но они куда слабее ударов барабанов. Уверенность будет низкой, а результат — ненадёжным. В таких случаях зачастую разумнее ввести BPM вручную, исходя из замысла композитора.
Конфиденциальность
Ваш файл анализируется целиком в этой вкладке: декодируется через Web Audio API, обрабатывается браузерным TypeScript и никогда не загружается. Закроете вкладку — всё рабочее состояние удаляется.