A JACK-aware drum machine with timeline-based pattern arrangement for Linux.
- π΅ JACK Audio Integration - Real-time low-latency drum playback
- π¨ Interactive Timeline Editor - Drag, drop, resize regions with snap-to-grid
- π Pattern Library - Groove, fill, and half-time patterns
- πΌ Dynamic Time Signatures - Right-click regions to change time signature
- β±οΈ Tempo Control - 40-300 BPM with real-time adjustment
- π Zoom Controls - Mouse wheel zoom (Ctrl+scroll) and toolbar buttons
- β¨οΈ Keyboard Shortcuts - Delete key to remove regions, standard shortcuts
- πΎ Project Persistence - Save/load projects in JSON format (.beater files)
- ποΈ Transport Controls - Play, stop, rewind with visual playhead
- π Cross-Platform Sample Detection - Automatically finds samples in common locations
- π¨ Dark Theme UI - Professional modern interface
- π Playhead Control - Click to position, drag to scrub
Download the latest release from Releases:
# Download and extract
wget https://github.com/applebiter/beater/releases/download/v0.1.0/beater
chmod +x beater
# Install dependencies
sudo apt install jackd2 qjackctl libqt6widgets6 libsndfile1
# Start JACK (use qjackctl or command line)
qjackctl &
# Run Beater
./beater# Ubuntu/Debian
sudo apt-get install build-essential cmake git \
libjack-jackd2-dev libsndfile1-dev \
qt6-base-dev libqt6widgets6
# Arch Linux
sudo pacman -S base-devel cmake git jack2 libsndfile qt6-basegit clone https://github.com/applebiter/beater.git
cd beater
mkdir build
cd build
cmake ..
make -j$(nproc)# Start JACK first
qjackctl &
# Run from build directory
./src/beater- Start JACK - Use qjackctl or start JACK manually
- Launch Beater - The application will auto-detect drum samples
- Drag Patterns - Drag pattern blocks from the palette to the timeline
- Edit Timeline - Click, drag, resize, and delete regions
- Change Time Signatures - Right-click regions to set custom time signatures
- Adjust Tempo - Use the tempo spinbox or type a value
- Play/Stop - Use transport controls or spacebar
- Save Projects - File β Save (Ctrl+S)
Ctrl+N- New projectCtrl+O- Open projectCtrl+S- Save projectCtrl+Shift+S- Save AsCtrl+,- SettingsDeleteorBackspace- Delete selected regionCtrl+Scroll- Zoom timeline
Beater automatically searches for drum samples in:
/usr/share/hydrogen/data/drumkits/GMRockKit//usr/local/share/hydrogen/data/drumkits/GMRockKit/~/.hydrogen/data/drumkits/GMRockKit/./samples/(relative to executable)
To add custom sample directories: File β Settings
Projects are saved as JSON files with .beater extension:
{
"version": 1,
"name": "My Project",
"patterns": [...],
"tracks": [...],
"instruments": [...],
"meterChanges": [...]
}beater/
βββ src/
β βββ domain/ # Core data structures
β β βββ TimeTypes # Musical time, tempo, meter
β β βββ Pattern # Note sequences
β β βββ Region # Timeline blocks
β β βββ Track # Arrangement lanes
β β βββ Instrument # Sample mapping
β β βββ Project # Top-level document
β βββ engine/ # Audio processing
β β βββ JackAudioBackend # JACK integration
β β βββ Sampler # Sample playback
β β βββ Scheduler # Event scheduling
β β βββ Transport # Playback control
β βββ ui/ # Qt6 interface
β β βββ MainWindow # Main application window
β β βββ TimelineWidget # Timeline editor
β β βββ PatternPalette # Pattern library
β βββ serialization/ # JSON save/load
β βββ app/ # Main entry point
βββ tests/ # Unit tests
βββ external/ # Third-party dependencies (nlohmann/json)
- Language: C++17
- UI Framework: Qt6 (6.4.2+)
- Audio Backend: JACK Audio Connection Kit
- Build System: CMake 3.16+
- Sample Loading: libsndfile
- Serialization: nlohmann/json
- Time Resolution: 960 PPQ (Pulses Per Quarter note)
- Install Hydrogen drum machine:
sudo apt install hydrogen - Or configure custom sample directories in Settings
- Ensure JACK is running:
jack_lspshould list ports - Check JACK settings in qjackctl (try 48000 Hz, 256 frames)
- Verify Beater appears in JACK connections
- Ubuntu 22.04+:
sudo apt install qt6-base-dev - Older Ubuntu: Add Qt6 PPA or build from source
Contributions welcome! Areas for improvement:
- Windows/Mac audio backend support
- Additional pattern types
- MIDI I/O
- LV2 plugin hosting
- Improved sample management
MIT License - see LICENSE file for details.
Free to use, modify, and distribute.
- Inspired by Hydrogen Drum Machine
- Uses JACK Audio Connection Kit
- Qt6 framework for UI
- GitHub: https://github.com/applebiter/beater
- Issues: https://github.com/applebiter/beater/issues
- Releases: https://github.com/applebiter/beater/releases
Note: This is an early release focused on Linux with JACK. Windows/Mac support and additional features are planned for future releases.