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.
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 ..
makeOn 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.
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.
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 |
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-pluginThe 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.