Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

597 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BPM Detect

C++ GitHub tag (with filter) License GitHub commits since latest release (by SemVer including pre-releases) Dependabot GitHub Pages Stargazers pre-commit.ci status CMake Prettier Tests Coverage Status

@Tatsh Buy Me A Coffee Libera.Chat Mastodon Follow Patreon

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.

Packaging status

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.

About

Automatic BPM (beats per minute) detection utility.

Topics

Resources

Contributing

Security policy

Stars

14 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages