An open-source drum machine VST3 plugin built with the JUCE framework. JDrummer features Soundfont-based drum kits, a comprehensive groove library with tempo-synced playback, a composition tool, and an intelligent Groove Matcher that analyzes audio to find matching drum patterns.
https://youtu.be/mbGQnUJ8rxg?si=QsWpq8BCVJYmjcz9
- Features
- Installation
- Building from Source
- Project Structure
- Dependencies
- Tested DAWs/Known Issues
- Troubleshooting
- Contributing
- License
- Acknowledgments
- 16-pad drum grid with velocity-sensitive playback
- Multiple Soundfont kits - Ships with 28 drum kits including:
- Standard acoustic kits (Standard, Room Drums, Power Drums, Jazz Drums)
- Electronic kits (808, Electronic Drums, Dance Drums, House Kit)
- Specialty kits (Orchestral Percussion, Brush Drums, NIN Drumkit)
- Per-pad controls:
- Individual volume adjustment (0-100%)
- Pan control (left/right) (Panning is currently backwards, see issue 10: #10 )
- Solo and mute options
- Dynamic kit loading - Add your own .sf2 SoundFont files to expand your library
- Multi Out Support - Fan each drum pience to an individual track for mixing
- Extensive groove library organized by category:
- Basic Beats
- Break Beats
- Buildups
- Double Bass Beats
- Fills
- Half Time Beats
- OffBeats
- Swing Beats
- Tom Beats
- Tempo-synced playback - Grooves automatically sync to your DAW's tempo
- Preview functionality - Audition grooves before adding them to your project
- Drag and drop - Drag any groove directly into your DAW as a MIDI clip
- Bar selection - Choose how many bars of a groove to use (1-16 bars)
- Dynamic Groove Loading add your own drum grooves
- Build complete drum parts by combining multiple grooves
- Visual timeline showing your arrangement
- Reorder and remove items from your composition
- Export as MIDI - Drag your entire composition to the DAW
- Loop playback for previewing your arrangement
An intelligent feature inspired by professional drum software that helps you find the perfect groove for your music:
- Audio analysis - Drop any audio file (WAV, MP3, FLAC, OGG, AIFF) to analyze its rhythm
- BPM detection - Automatically detects tempo using the minibpm library
- Smart filename parsing - Extracts BPM from filenames (e.g., "beat_120bpm.wav")
- Pattern matching - Analyzes rhythm patterns and finds matching grooves from your library
- Similarity scoring - Shows match percentage for each suggested groove
- Preview with audio - Play back the matched groove alongside your original audio
- Automatic composition - Best match is automatically added to the composer
- Seamless workflow - Found the perfect match? Drag it straight to your DAW
Groove Matcher Tab
Binary VST3 for Linux, Windows, and macOS available on the Releases page. macOS builds include both VST3 and Audio Unit (AU) formats.
Copy the VST3 bundle to your VST3 directory:
cp -r jdrummer.vst3 ~/.vst3/Copy the jdrummer.vst3 folder to one of these locations:
- System-wide:
C:\Program Files\Common Files\VST3\ - User only:
C:\Users\<YourUsername>\Documents\VST3\
JDrummer builds as both VST3 and Audio Unit (AU) on macOS.
VST3 Installation: Copy the VST3 bundle to your VST3 directory:
cp -r jdrummer.vst3 ~/Library/Audio/Plug-Ins/VST3/
# Or system-wide:
sudo cp -r jdrummer.vst3 /Library/Audio/Plug-Ins/VST3/Audio Unit Installation: Copy the AU component to your Components directory:
cp -r jdrummer.component ~/Library/Audio/Plug-Ins/Components/
# Or system-wide:
sudo cp -r jdrummer.component /Library/Audio/Plug-Ins/Components/After installing, you may need to restart your DAW or run:
killall -9 AudioComponentRegistrarPlace additional .sf2 SoundFont files in the plugin's soundfonts directory:
- Linux:
~/.vst3/jdrummer.vst3/Contents/Resources/soundfonts/ - Windows:
<VST3 Location>\jdrummer.vst3\Contents\Resources\soundfonts\ - macOS (VST3):
~/Library/Audio/Plug-Ins/VST3/jdrummer.vst3/Contents/Resources/soundfonts/ - macOS (AU):
~/Library/Audio/Plug-Ins/Components/jdrummer.component/Contents/Resources/soundfonts/
The plugin will automatically detect new SoundFonts on the next load.
Place additional .mid MIDI files in the plugin's Grooves directory:
- Linux:
~/.vst3/jdrummer.vst3/Contents/Resources/Grooves/ - Windows:
<VST3 Location>\jdrummer.vst3\Contents\Resources\Grooves\ - macOS (VST3):
~/Library/Audio/Plug-Ins/VST3/jdrummer.vst3/Contents/Resources/Grooves/ - macOS (AU):
~/Library/Audio/Plug-Ins/Components/jdrummer.component/Contents/Resources/Grooves/
Organize grooves into subfolders to create categories in the browser.
sudo apt update
sudo apt install build-essential cmake git
sudo apt install libasound2-dev libjack-jackd2-dev libcurl4-openssl-dev
sudo apt install libfreetype6-dev libx11-dev libxcomposite-dev libxcursor-dev
sudo apt install libxext-dev libxinerama-dev libxrandr-dev libxrender-dev
sudo apt install libwebkit2gtk-4.0-dev libglu1-mesa-dev mesa-common-devsudo dnf groupinstall "Development Tools"
sudo dnf install cmake git alsa-lib-devel jack-audio-connection-kit-devel
sudo dnf install freetype-devel libX11-devel libXcomposite-devel libXcursor-devel
sudo dnf install libXext-devel libXinerama-devel libXrandr-devel libXrender-devel
sudo dnf install webkit2gtk3-devel mesa-libGLU-devel mesa-libGL-devel libcurl-develsudo pacman -S base-devel cmake git alsa-lib jack2
sudo pacman -S freetype2 libx11 libxcomposite libxcursor libxext libxinerama
sudo pacman -S libxrandr libxrender webkit2gtk glu mesa curl- Visual Studio 2019 or later with C++ desktop development workload
- CMake 3.15 or later
- Git
# Install Xcode Command Line Tools
xcode-select --install
# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install CMake
brew install cmakeRequirements:
- macOS 10.13 (High Sierra) or later
- Xcode 12 or later (or Command Line Tools)
- CMake 3.15 or later
-
Clone the repository
git clone https://github.com/yourusername/jdrummer.git cd jdrummer -
Create build directory and configure
mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release
-
Build the plugin
make -j$(nproc) -
Install the VST3
# The VST3 bundle will be in: # build/jdrummer_artefacts/Release/VST3/jdrummer.vst3 # Copy to your VST3 directory cp -r jdrummer_artefacts/Release/VST3/jdrummer.vst3 ~/.vst3/
-
Clone the repository
git clone https://github.com/yourusername/jdrummer.git cd jdrummer
-
Create build directory and configure
mkdir build cd build cmake .. -G "Visual Studio 17 2022" -A x64
-
Build the plugin
cmake --build . --config Release
-
Install the VST3
# The VST3 bundle will be in: # build\jdrummer_artefacts\Release\VST3\jdrummer.vst3 # Copy to your VST3 directory xcopy /E /I jdrummer_artefacts\Release\VST3\jdrummer.vst3 "%COMMONPROGRAMFILES%\VST3\jdrummer.vst3"
-
Clone the repository
git clone https://github.com/yourusername/jdrummer.git cd jdrummer -
Create build directory and configure
mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release -G "Xcode"
Or for a Makefile-based build (faster for command line):
mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release
-
Build the plugin
Using Xcode project:
cmake --build . --config ReleaseOr using Make:
make -j$(sysctl -n hw.ncpu) -
Install the VST3
# The VST3 bundle will be in: # build/jdrummer_artefacts/Release/VST3/jdrummer.vst3 # Copy to your user VST3 directory cp -r jdrummer_artefacts/Release/VST3/jdrummer.vst3 ~/Library/Audio/Plug-Ins/VST3/ # Or system-wide (requires admin password) sudo cp -r jdrummer_artefacts/Release/VST3/jdrummer.vst3 /Library/Audio/Plug-Ins/VST3/
-
Install the Audio Unit
# The AU component will be in: # build/jdrummer_artefacts/Release/AU/jdrummer.component # Copy to your user Components directory cp -r jdrummer_artefacts/Release/AU/jdrummer.component ~/Library/Audio/Plug-Ins/Components/ # Or system-wide (requires admin password) sudo cp -r jdrummer_artefacts/Release/AU/jdrummer.component /Library/Audio/Plug-Ins/Components/
-
Refresh Audio Unit cache (if the AU doesn't appear in your DAW)
killall -9 AudioComponentRegistrar
This allows you to build Windows VST3 plugins on a Linux machine using MinGW.
-
Install MinGW-w64
Debian/Ubuntu:
sudo apt install mingw-w64
Fedora:
sudo dnf install mingw64-gcc mingw64-gcc-c++ mingw64-winpthreads-static
Arch:
sudo pacman -S mingw-w64-gcc
-
Fix Windows.h case sensitivity (Fedora/some distros)
The VST3 SDK expects
Windows.hbut MinGW provideswindows.h. Create a symlink:sudo ln -sf /usr/x86_64-w64-mingw32/sys-root/mingw/include/windows.h \ /usr/x86_64-w64-mingw32/sys-root/mingw/include/Windows.h -
Create the toolchain file
Create
cmake/windows-toolchain.cmake:set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR x86_64) set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(WIN32 TRUE) set(MINGW TRUE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc -static-libstdc++")
-
Build for Windows
mkdir build-windows && cd build-windows cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/windows-toolchain.cmake -DCMAKE_BUILD_TYPE=Release make -j$(nproc)
-
Package the VST3
# Create distribution package mkdir -p dist/jdrummer.vst3/Contents/x86_64-win mkdir -p dist/jdrummer.vst3/Contents/Resources cp jdrummer_artefacts/Release/VST3/jdrummer.vst3/Contents/x86_64-win/jdrummer.vst3 \ dist/jdrummer.vst3/Contents/x86_64-win/ cp -r ../soundfonts dist/jdrummer.vst3/Contents/Resources/ cp -r ../Grooves dist/jdrummer.vst3/Contents/Resources/ # Create zip for distribution cd dist && zip -r ../jdrummer-windows-vst3.zip jdrummer.vst3
jdrummer/
├── CMakeLists.txt # Main build configuration
├── README.md # This file
├── Source/
│ ├── PluginProcessor.cpp/h # Audio processing & plugin state
│ ├── PluginEditor.cpp/h # Main UI with tab navigation
│ ├── SoundFontManager.cpp/h # SoundFont loading & playback
│ ├── GrooveManager.cpp/h # MIDI groove management & playback
│ ├── AudioAnalyzer.cpp/h # Audio analysis for Groove Matcher
│ ├── JuceHeader.h # JUCE module includes
│ └── Components/
│ ├── DrumPad.cpp/h # Individual drum pad component
│ ├── DrumPadGrid.cpp/h # 4x4 drum pad grid
│ ├── PadControls.cpp/h # Volume/pan/solo/mute controls
│ ├── KitSelector.cpp/h # SoundFont kit dropdown
│ ├── GroovesPanel.cpp/h # Grooves browser & composer
│ └── BandmatePanel.cpp/h # Groove Matcher UI
├── libs/
│ ├── TinySoundFont/ # SoundFont synthesis library
│ └── minibpm/ # BPM detection library
├── soundfonts/ # Included drum kit SoundFonts
├── Grooves/ # MIDI groove library
└── cmake/
└── windows-toolchain.cmake # Cross-compilation toolchain
JDrummer uses the following open-source libraries:
- JUCE - Cross-platform C++ framework for audio applications
- TinySoundFont - SoundFont synthesis library
- minibpm - Lightweight BPM detection library
JDrummer has been tested with:
- Ardour (Linux, Windows, macOS)
- REAPER (Linux, Windows,macOS)
- GarageBand (macOS) - AU only
- Bitwig Studio (Linux, Windows) - Drag and Drop does not currently work in Bitwig Flatpak 5.3
- Plugin crashes when trying to load in Qtractor
- n-track (Linux)
- Studio Pro 7 Beta for Linux - Plugin loads but GUI elements don't show
- Qtractor - Plugin loads in the latest appimage version but drag and drop does not work.
- FL Studio (Windows) - Able to drag to Piano Roll window but not track
- Ensure the VST3 is in the correct directory
- Rescan plugins in your DAW
- Check that the Resources folder contains soundfonts and Grooves
- Check that a SoundFont kit is selected
- Verify pad volumes are not at 0%
- Ensure pads are not muted
- Make sure the DAW is playing (transport running)
- Check that the DAW is sending tempo information
- Try audio files with clear rhythmic content
- Use files with BPM in the filename for best results
- Ensure the audio file is a supported format (WAV, MP3, FLAC, OGG, AIFF)
- Run
killall -9 AudioComponentRegistrarto refresh the AU cache - Restart your DAW after installing
- Check that the
.componentbundle is in~/Library/Audio/Plug-Ins/Components/or/Library/Audio/Plug-Ins/Components/ - Verify the plugin passes validation:
auval -v aumu Jdrm Manu
If macOS blocks the plugin as unidentified developer:
- Right-click (or Control-click) on the
.vst3or.componentbundle - Select "Open" from the context menu
- Click "Open" in the dialog that appears
- Alternatively, run:
xattr -cr ~/Library/Audio/Plug-Ins/VST3/jdrummer.vst3
Contributions are welcome! Please feel free to submit issues and pull requests.
This project is open source. See LICENSE file for details.
- Thanks to the JUCE team for their excellent framework
- TinySoundFont by Bernhard Schelling
- minibpm by BreakfastQuay
- Soundfonts by:
- S. Christian Collins GeneralUser GS Soundfont
- AVL Drumkits by Glen MacArthur licensed under CC-BY-SA 3.0
- Hydrogen Drum Kits
- Kor Tiny
- SoniNeko and NIN Kit found on Musical Artifacts
- MIDI Grooves by TheDrumJockey