Skip to content

Repository files navigation

foobar2000 BPM & Key Detector Plugin (foo_bpmkey) v2.0

English | Русский

A foobar2000 component that automatically analyses BPM and musical key of audio tracks and writes them into configurable metadata tags.

Main Dialog Preferences Panel
Main Window Preferences

🇬🇧 English

Overview

foo_bpmkey scans selected tracks and detects two audio properties:

  • BPM — using an algorithm based on foo_bpm by 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.

Features

  • 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 BPM and INITIALKEY).
  • 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_metrono component (Metronome button).
  • Preferences are saved between sessions; window size and position are remembered as well.

Usage

  1. Select one or more tracks in a foobar2000 playlist.
  2. Right-click → Detect BPM & Key.
  3. Wait for the analysis to complete.
  4. Review the results, adjust if needed (double-click or use the buttons).
  5. Press SAVE TAGS to write the values into the files, or EXPORT CSV to save a report.

Preferences

Tag Writing

  • BPM Tag / Key Tag — names of the metadata fields to write to.
  • Auto-save tags — write tags automatically after each analysis.

BPM Algorithm Settings

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

Key Algorithm Settings (libkeyfinder)

  • 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.

Credits

  • BPM algorithm based on foo_bpm by Michael Balzer and Holger Stenger.
  • FFT routines from KissFFT by Mark Borgerding.
  • Key detection via libkeyfinder by Ibrahim Sha'ath and contributors.

License

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).
  • Настройки сохраняются между сессиями; размер и положение окна тоже запоминаются.

Использование

  1. Выделите один или несколько треков в плейлисте foobar2000.
  2. Правый клик → Detect BPM & Key.
  3. Дождитесь окончания анализа.
  4. Проверьте результаты и при необходимости скорректируйте их (двойной клик или кнопки ×2 / ÷2 / ROUND).
  5. Нажмите SAVE TAGS, чтобы записать значения в файлы, или EXPORT CSV для сохранения отчёта.

Настройки

Tag Writing

  • BPM Tag / Key Tag — имена тегов метаданных, куда писать значения.
  • Auto-save tags — автоматически писать теги после каждого анализа.

BPM Algorithm Settings

Настройка Описание По умолчанию
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 Вкл.

Key Algorithm Settings (libkeyfinder)

  • Размер FFT и профиль хромы фиксированы в libkeyfinder (показываются только для справки).
  • Enable Fast Analysis (Downsampling) — уменьшить частоту дискретизации в 2 раза перед анализом тональности; ускорение примерно в 2 раза при незначительной потере точности.

Благодарности

  • Алгоритм BPM основан на foo_bpm Майкла Бальцера и Холгера Штенгера.
  • FFT-процедуры — из KissFFT Марка Боргердинга.
  • Определение тональности — через libkeyfinder Ибрагима Шаата и участников проекта.

Лицензия

Распространяется по лицензии MIT.

Releases

Packages

Contributors

Languages