Как BeatScope определяет тональность и темп
Коротко: темп мы считаем через огибающую онсетов и её автокорреляцию, тональность — через хромаграмму и корреляцию с профилями Крумхансла–Шмуклера, а бит-грид расставляем динамическим программированием. Всё офлайн, на устройстве. Ниже — как именно, и почему мы выбрали эти методы.
Когда мы делали BeatScope, задача звучала просто: за секунды и без интернета выдать диджею три числа по треку — BPM, тональность и энергию — и сделать это достаточно точно, чтобы им можно было доверять в живом сведении. За «просто» здесь стоит классический цифровой анализ сигналов. Вот наш пайплайн честно, по шагам.
Как мы определяем темп (BPM)
Темп — это периодичность в потоке энергии трека. Мы не «слушаем бас-бочку» напрямую, а ищем регулярность в моментах, когда в звуке что-то происходит.
- Спектральный поток → онсеты. Считаем, насколько сильно меняется спектр между кадрами. Резкие приросты энергии — это онсеты (атаки бочки, снейра, синтов). Из них собираем огибающую онсетов.
- Автокорреляция. Автокоррелируем огибающую: на каком сдвиге сигнал сильнее всего похож на себя — там и период доли.
- Комб-оценка кратных периодов. Проверяем не только базовый период, но и кратные (½, 2×), чтобы не спутать темп с его гармониками.
- Октавная свёртка + приоритет диапазона. Сворачиваем кандидатов в диапазон
60–180 BPMи мягко предпочитаем типичные для танцевальной музыки значения — так реже возникает классическая ошибка «174 против 87». - Медианное сглаживание. Финальное значение сглаживаем по медиане, чтобы одиночные всплески не сбивали оценку.
Для самого бит-грида (где именно стоят доли на волне) мы используем подход динамического программирования в духе бит-трекера Дэна Эллиса[3]: он ищет такую расстановку долей, которая одновременно ложится на онсеты и держит ровный интервал — поэтому сетка не «плывёт» по треку.
Как мы определяем тональность
Тональность мы оцениваем по распределению энергии между 12 полутонами — это называется хромаграммой.
- Хромаграмма. Сворачиваем спектр (диапазон ~
55–2000 Гц) в 12 классов высоты и накапливаем через утечковый интегратор с памятью около8 секунд— получаем усреднённый «профиль нот» трека. - Корреляция с профилями Крумхансла–Шмуклера. Сравниваем этот профиль с 24 эталонными профилями тональностей (12 мажорных + 12 минорных). Лучшее совпадение — искомая тональность.
- Перевод в Camelot. Отдаём результат и в нотах, и в коде Camelot — так гармоничное сведение сводится к арифметике по колесу.
Этот подход восходит к libKeyFinder Ибрагима Ша'ата[2] и к работам Кэрол Крумхансл по восприятию тональности[1] — тем же методом пользуются студийные ключ-детекторы. Мы портировали его в чистый расчёт на устройстве, без обращения к серверу.
Почему офлайн и на устройстве
Никакой загрузки треков на сервер: анализ идёт локально. Это быстрее (нет сети в цикле), приватнее (музыка не покидает устройство) и работает в клубе без интернета. И это принципиально бесплатно — незачем платить за облачные вычисления, которых нет.
Как мы считаем энергию
«Энергия» — это ощущение напора трека. Мы оцениваем её по громкости (RMS) и спектральному балансу и приводим к простой шкале, чтобы в библиотеке можно было выстраивать сет по нарастанию.
Точность и честные ограничения
На материале с внятной ритм-секцией и стабильной тональностью оценки надёжны. Где метод объективно сложнее:
- Атональная или очень насыщенная гармония — профиль размывается, тональность менее уверенна.
- Модуляция внутри трека — мы отдаём доминирующую тональность, а не каждый её сдвиг.
- Слабая перкуссия / рубато — онсетов мало, оценка BPM менее стабильна.
- Октавные ошибки темпа — их гасит свёртка в диапазон и приоритет, но на пограничных жанрах стоит перепроверить вручную.
Мы намеренно не завышаем ожидания: BeatScope — быстрый и точный помощник, а последнее слово в спорных случаях всегда за ухом диджея.
Итог
BPM — из онсетов и автокорреляции с октавной свёрткой; тональность — из хромаграммы и профилей Крумхансла–Шмуклера с переводом в Camelot; бит-грид — динамическим программированием. Всё считается на Mac и iPhone офлайн, за секунды, бесплатно.
Источники
- Krumhansl C. L. Cognitive Foundations of Musical Pitch. Oxford University Press, 1990.
- Sha'ath I. Estimation of Key in Digital Music Recordings. MSc thesis, Birkbeck College, University of London, 2011 (libKeyFinder).
- Ellis D. P. W. Beat Tracking by Dynamic Programming. Journal of New Music Research, 36(1), 2007.