A foobar2000 component that automatically analyses BPM and musical key of audio tracks and writes them into configurable metadata tags.
| Main Dialog | Preferences Panel |
|---|---|
![]() |
![]() |
foo_bpmkey scans selected tracks and detects two audio properties:
- BPM — using an algorithm based on
foo_bpmby Michael Balzer (STFT → spectral flux → median peak picking → comb filter → mode across multiple segments). - Key — using
libkeyfinder(chromagram + Krumhansl-Schmuckler-style profile matching).
Results are shown in a resizable dialog where they can be edited, doubled / halved, manually rounded, exported to CSV, or written into tags.
- Automatic BPM detection in the range you specify.
- Automatic musical key detection.
- Multi-segment analysis: the track is split into N windows, each analysed separately; the final value is chosen by Mode, Median or Average.
- Octave / swing error correction (
×2,÷2,×1.6) based on cluster agreement across windows. - Optional low-pass filter (default 250 Hz) to isolate kick drums and bass.
- Configurable metadata tags for BPM and Key (default
BPMandINITIALKEY). - Editable results table — double-click a BPM cell to edit, or use ×2 / ÷2 / ROUND on selected rows.
- CSV export.
- Optional integration with the
foo_metronocomponent (Metronome button). - Preferences are saved between sessions; window size and position are remembered as well.
- Select one or more tracks in a foobar2000 playlist.
- Right-click → Detect BPM & Key.
- Wait for the analysis to complete.
- Review the results, adjust if needed (double-click or use the buttons).
- Press SAVE TAGS to write the values into the files, or EXPORT CSV to save a report.
- BPM Tag / Key Tag — names of the metadata fields to write to.
- Auto-save tags — write tags automatically after each analysis.
| Setting | Description | Default |
|---|---|---|
| BPM range | Min / Max BPM to search | 65 – 215 |
| Display precision | How the BPM is shown and written (Integer / 1 decimal / 2 decimals) | Integer |
| Offset range | Analyse only the middle portion of the track (skip intro / outro) | On, 20–80 % |
| Max time limit | Cap the analysed fragment length (seconds) | Off |
| Segment duration | Length of each analysis window, seconds | 15 |
| Segments | Number of analysis windows per track | 15 |
| Combine method | Mode / Median / Average across windows | Mode |
| Interpolate flux | Sub-sample interpolation in the comb filter | On |
| Apply Low-Pass Filter | Isolate kick / bass before the BPM analysis | Off (250 Hz) |
| Auto-correct octave errors | Apply ×2 / ÷2 / ×1.6 correction | On |
- FFT size and chroma profile are fixed by libkeyfinder (displayed for information only).
- Enable Fast Analysis (Downsampling) — halve the sample rate before key detection for a ~2× speed-up with negligible accuracy loss.
- BPM algorithm based on
foo_bpmby Michael Balzer and Holger Stenger. - FFT routines from KissFFT by Mark Borgerding.
- Key detection via
libkeyfinderby Ibrahim Sha'ath and contributors.
Distributed under the MIT License.
foo_bpmkey — компонент для foobar2000, который автоматически определяет
BPM и музыкальную тональность аудиотреков и записывает результаты в
настраиваемые теги метаданных.
- BPM определяется алгоритмом, основанным на
foo_bpmМайкла Бальцера (STFT → спектральный поток → медианный пик-пикинг → comb-фильтр → выбор моды по нескольким фрагментам). - Тональность определяется через
libkeyfinder(хромаграмма и сопоставление с профилями Крумхансла-Шмуклера).
Результаты показываются в окне с изменяемым размером, где их можно редактировать вручную, удваивать / делить на 2, округлять, экспортировать в CSV или записывать в теги.
- Автоматическое определение BPM в заданном пользователем диапазоне.
- Автоматическое определение музыкальной тональности.
- Многосегментный анализ: трек разбивается на N окон, каждое анализируется отдельно; итог выбирается по Mode, Median или Average.
- Коррекция октавных и триольных ошибок (
×2,÷2,×1.6) на основе согласованности кластеров по окнам. - Опциональный фильтр нижних частот (по умолчанию 250 Гц) для выделения ударов бас-барабана и баса.
- Настраиваемые имена тегов для BPM и Key (по умолчанию
BPMиINITIALKEY). - Редактируемая таблица результатов — двойной клик по ячейке BPM или кнопки ×2 / ÷2 / ROUND для выделенных строк.
- Экспорт в CSV.
- Опциональная интеграция с компонентом
foo_metrono(кнопка METRONOME). - Настройки сохраняются между сессиями; размер и положение окна тоже запоминаются.
- Выделите один или несколько треков в плейлисте foobar2000.
- Правый клик → Detect BPM & Key.
- Дождитесь окончания анализа.
- Проверьте результаты и при необходимости скорректируйте их (двойной клик или кнопки ×2 / ÷2 / ROUND).
- Нажмите SAVE TAGS, чтобы записать значения в файлы, или EXPORT CSV для сохранения отчёта.
- BPM Tag / Key Tag — имена тегов метаданных, куда писать значения.
- Auto-save tags — автоматически писать теги после каждого анализа.
| Настройка | Описание | По умолчанию |
|---|---|---|
| BPM range | Минимум / максимум BPM для поиска | 65 – 215 |
| Display precision | Формат вывода и записи BPM (целое / 1 знак / 2 знака) | Целое |
| Offset range | Анализировать только середину трека (пропускать интро / аутро) | Вкл., 20–80 % |
| Max time limit | Ограничение длины анализируемого фрагмента (сек) | Выкл. |
| Segment duration | Длина окна анализа, секунды | 15 |
| Segments | Количество окон анализа на трек | 15 |
| Combine method | Mode / Median / Average по окнам | Mode |
| Interpolate flux | Суб-отсчётная интерполяция в comb-фильтре | Вкл. |
| Apply Low-Pass Filter | Выделить бас / бочку перед анализом BPM | Выкл. (250 Гц) |
| Auto-correct octave errors | Применять коррекцию ×2 / ÷2 / ×1.6 | Вкл. |
- Размер FFT и профиль хромы фиксированы в libkeyfinder (показываются только для справки).
- Enable Fast Analysis (Downsampling) — уменьшить частоту дискретизации в 2 раза перед анализом тональности; ускорение примерно в 2 раза при незначительной потере точности.
- Алгоритм BPM основан на
foo_bpmМайкла Бальцера и Холгера Штенгера. - FFT-процедуры — из KissFFT Марка Боргердинга.
- Определение тональности — через
libkeyfinderИбрагима Шаата и участников проекта.
Распространяется по лицензии MIT.

