BPM Detect


BPM Detect is an automatic BPM (beats per minute) detection utility.
It uses SoundTouch's BPM library for detecting BPMs, ffmpeg for reading and writing BPMs to tags
and Qt for the GUI. It supports detection with any audio format that ffmpeg can read. However, for
files containing multiple audio tracks, only the first seen will be used for detection.
On Windows, this application requires
Media Feature Pack
to be installed.
Some formats cannot save tags. The application will not warn you about these. M4A (AAC, 3GP, etc)
store tags in the tmpo atom which is limited to integers but this will not be seen as saved on
restart because ffmpeg does not parse the tmpo atom when reading the file.

Original project
Building
Required dependencies:
- CMake at build time
- ECM at build time
- Qt 6.7 or later with Gui and Multimedia modules
- SoundTouch 2.3.2 or later
- ffmpeg 6 or later
In the cloned project:
mkdir build
cmake ..
make
On MacPorts, set the CMAKE_PREFIX_PATH variable to
/opt/local/libexec/ffmpeg7;/opt/local/libexec/qt6.
To build tests, add -DBUILD_TESTS=ON. Add -DCOVERAGE=ON to enable coverage (Clang and GCC only).
Translation support has been added but there are currently no translations. This can be enabled with
-DI18N=ON.
DAW plugin
A tempo analyser plugin is available in CLAP, LV2, and VST3 formats. Drop it on a track and it
reports the detected tempo through a read-only Detected BPM parameter and in its own UI, which
shows the current estimate as a large readout with a reset button. The UI matters in hosts such as
Qtractor whose generic plugin UIs do not display output parameters; many others (Ardour, Audacity,
Bitwig, Carla, and REAPER) also show the parameter directly. Audio passes through unmodified. The
Minimum
BPM and Maximum BPM parameters control the octave folding of the raw estimate, and the Reset
trigger discards the analysis so far. The estimate updates about once per second and needs a few
seconds of audio to settle.
Installing the plugin
Download the archive for your platform from the
latest release (bpmdetect-plugin-*.zip; Linux
x86_64 and aarch64, Windows x64 and ARM64, and macOS universal builds are provided; SoundTouch is
statically linked) and extract the bundles to the appropriate directory:
| Format | Linux | macOS | Windows |
|---|
| CLAP | ~/.clap or /usr/lib/clap | ~/Library/Audio/Plug-Ins/CLAP | C:\Program Files\Common Files\CLAP |
| LV2 | ~/.lv2 or /usr/lib/lv2 | ~/Library/Audio/Plug-Ins/LV2 | C:\Program Files\Common Files\LV2 |
| VST3 | ~/.vst3 or /usr/lib/vst3 | ~/Library/Audio/Plug-Ins/VST3 | C:\Program Files\Common Files\VST3 |
Building the plugin
The plugin needs only SoundTouch and DPF, which is downloaded at
configure time at a pinned revision. Build it together with the application by adding
-DBUILD_PLUGIN=ON, or on its own:
cmake -S plugin -B build-plugin -DCMAKE_BUILD_TYPE=Release
cmake --build build-plugin
The bundles are written to build-plugin/bin. Add -DUSE_SYSTEM_DPF=ON to use a DPF tree already
on the system instead of downloading one (set DPF_ROOT if it is not in a standard location; there
is no download fallback). Add -DPLUGIN_STATIC_SOUNDTOUCH=ON to build SoundTouch from source and
link it statically so the bundles do not depend on a system SoundTouch.