Professional auto-sampling tool for hardware synthesizers
Batcherbird is an open-source hardware sampling tool built with Rust and Tauri. It provides professional-grade batch sampling of hardware synthesizers with pristine audio quality, offering an accessible alternative to expensive commercial solutions.
- 32-bit float WAV export (studio standard)
- Sub-millisecond MIDI timing precision
- Automatic release tail capture (500ms professional standard)
- Zero-dropout recording engine with persistent streams
- Smart Sample Detection: Automatic trimming with RMS window analysis
- Auto-detects MIDI and audio interfaces
- Tested with real hardware (Korg DW6000, Arturia MiniFuse)
- Enhanced MIDI panic for vintage synthesizer compatibility
- Professional timing delays optimized for hardware stability
- Single Note Recording: Precise individual note sampling with custom velocity
- Range Recording: Batch sample entire octaves (C2-C7) automatically
- Velocity Layer Sampling: Multi-dynamic recording (2/3/4 layers + custom)
- Professional velocity curves (pp/mp/mf/ff dynamics)
- Smart naming:
DW6000_C4_60_vel127.wav - Crossfade-ready velocity mapping
- Real-time Progress: Sample-accurate progress with current note display
- Lock-Free Architecture: 60fps real-time meters with zero audio dropouts
- Industry Standards: Matches Pro Tools/Logic/Ableton metering
- Multiple Meter Types: Peak, RMS, and Peak Hold indicators
- Professional Ballistics: VU-style RMS with 11ms window
- Visual Design: dB scale (-60 to 0), color-coded zones, clipping indicators
- See REALTIME_METERS.md for technical details
- Status Bar: Real-time device connection indicators
- Recording-First Layout: Main controls prominently featured
- Settings Sidebar: Organized secondary options
- Modal Device Setup: Clean, focused configuration
- Visual Feedback: Color-coded status (Green=Connected, Red=Recording)
- Professional Folder Structure: Automatic instrument subfolders
- Industry-Standard Naming: Both note name (C4) and MIDI number (60)
- Consistent Velocity Format: Always use
vel064,vel127format - Sampler-Ready Format: Prepared for professional sampler import
- Native macOS folder picker integration
- Persistent preferences across sessions
- Session-safe MIDI state management
- Comprehensive error handling and graceful recovery
- macOS 10.15+ (Catalina or later)
- Audio interface connected to your synthesizer
- MIDI connection to your synthesizer
- Node.js 18+ and Rust 1.70+ (for development)
- Download the latest release from Releases
- Open the
.dmgfile and drag Batcherbird to Applications - Grant microphone and MIDI permissions when prompted
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Install Node.js (via Homebrew)
brew install node
# Install Tauri CLI
cargo install tauri-cli --version "^2.0"git clone https://github.com/yourusername/batcherbird.git
cd batcherbird
cd crates/batcherbird-gui
npm install🚀 Quick Start (Recommended):
cd crates/batcherbird-gui
npm run devThis starts both the Tauri backend and frontend development server in one command.
🔧 Alternative: Separate Processes
If you need to start them separately:
Backend only:
cd crates/batcherbird-gui
npm run tauri devFrontend only:
cd crates/batcherbird-gui
npm run dev:frontendTauri Process (Backend):
- Rust backend with professional audio processing
- MIDI device management and real-time communication
- File system operations and sample export
- Native desktop window and system integration
Vite Process (Frontend):
- React TypeScript UI with professional meter displays
- Real-time waveform visualization and audio monitoring
- User interface controls and device configuration
- Hot reload for development
Make sure you have:
- ✅ Audio interface connected (or built-in audio)
- ✅ MIDI device connected (like your Korg DW-6000)
- ✅ Audio cables properly routed (synth → interface → Mac)
- ✅ MIDI cables connected (Mac → MIDI interface → synth)
The app will auto-detect available MIDI and audio devices on startup.
cd crates/batcherbird-gui
cargo tauri build- Audio: Synth → Audio Interface → Mac
- MIDI: Mac → MIDI Interface → Synth
The new professional interface shows:
- Status Bar: Connection indicators at the top
- Recording Panel: Main controls in center
- Settings Sidebar: Output and detection options on right
- Click ⚙️ Setup to open device configuration
- Select your MIDI Output device (to trigger notes)
- Select your Audio Input device (to record synth output)
- Select your Audio Output device (for monitoring)
- Click Test to verify MIDI communication
- Click Done - status bar will show green indicators when connected
In the Settings Sidebar:
- Sample Name: Enter your instrument name (e.g., "DW6000")
- Save Location: Choose folder or use default Desktop/Batcherbird Samples
- Auto-trim samples: Enable for automatic sample detection
- Select Single Note tab
- Choose note (C4, C3, etc.)
- Set velocity (1-127) and duration
- Click 🔴 Record Sample
- Select Range Recording tab
- Set note range (e.g., C4 to C6)
- For Single Velocity: Leave "Velocity Layers" unchecked
- For Multi-Velocity: Check "Velocity Layers" and choose:
- 2 Layers: Soft (64) + Loud (127)
- 3 Layers: Soft (48) + Medium (96) + Loud (127)
- 4 Layers: Very Soft (32) + Soft (64) + Medium (96) + Loud (127)
- Custom: Enter comma-separated values (e.g., "40,80,120")
- Click 🎹 Record Range
- Real-time progress bar shows completion percentage
- Current note display shows which note is being recorded
- Velocity info shows current layer (for multi-velocity)
- Stop button appears during recording for immediate cancellation
- Click Show in Finder to open your samples folder
- Files are organized in instrument subfolders:
Desktop/Batcherbird Samples/DW6000/ - Professional naming:
DW6000_C4_60_vel127.wav
Perfect for:
- Testing individual patches
- Recording specific notes for loops or one-shots
- Quick sampling workflow
Workflow:
- Select the Single Note tab
- Choose your MIDI note (C4, C#4, etc.)
- Set velocity (1-127) for dynamics
- Set duration (500-5000ms) for note length + release tail
- Click 🔴 Record Sample
Output: Single WAV file like DW6000_C4_60_vel127.wav
Perfect for:
- Creating complete instrument mappings
- Batch sampling entire synthesizer patches
- Building velocity-layered instruments
Single Velocity Range:
- Records one sample per note across your specified range
- Fastest way to capture an entire patch
- Example: C4-C6 = 25 samples in ~12 minutes
Multi-Velocity Range (Professional Feature):
- Records multiple velocity layers per note
- Creates dynamically responsive instruments
- Based on musical dynamics (pianissimo to fortissimo)
- Soft (64): Mellow, filtered character
- Loud (127): Bright, full harmonics
- Use Case: Simple on/off dynamic behavior
- Soft (48): Pianissimo - very gentle
- Medium (96): Mezzo-forte - balanced tone
- Loud (127): Fortissimo - maximum power
- Use Case: Realistic dynamic response
- Very Soft (32): Pianissimo - barely audible attack
- Soft (64): Piano - gentle playing
- Medium (96): Forte - strong but controlled
- Loud (127): Fortissimo - maximum dynamics
- Use Case: Expressive performance instruments
- Enter your own comma-separated velocities
- Example:
40,80,120for 3 custom layers - Use Case: Hardware-specific velocity curves
Desktop/Batcherbird Samples/DW6000/
├── DW6000_C4_60_vel127.wav
├── DW6000_C#4_61_vel127.wav
├── DW6000_D4_62_vel127.wav
└── ...
Desktop/Batcherbird Samples/DW6000/
├── DW6000_C4_60_vel048.wav
├── DW6000_C4_60_vel096.wav
├── DW6000_C4_60_vel127.wav
├── DW6000_C#4_61_vel048.wav
├── DW6000_C#4_61_vel096.wav
├── DW6000_C#4_61_vel127.wav
└── ...
| Range | Velocity Layers | Total Samples | Estimated Time* |
|---|---|---|---|
| C4-C6 (25 notes) | 1 | 25 | ~12 minutes |
| C4-C6 (25 notes) | 3 | 75 | ~37 minutes |
| C2-C7 (61 notes) | 1 | 61 | ~30 minutes |
| C2-C7 (61 notes) | 4 | 244 | ~2 hours |
Based on 2000ms duration + 200ms delay between samples
- Start with Single Note to test your patch's velocity response
- Record C4 at velocities 32, 64, 96, 127
- Listen for timbral differences (not just volume)
- Choose appropriate velocity layer count based on character changes
- Percussive: 1000-2000ms (short decay)
- Sustained: 3000-5000ms (long pads, strings)
- Vintage Synth: 2000ms (good balance for most patches)
- Use MIDI Panic if notes get stuck
- Longer delays for vintage gear (some need 500ms between notes)
- Test with Preview before full range recording
| Synthesizer | Audio Interface | Status |
|---|---|---|
| Korg DW6000 | Arturia MiniFuse | ✅ Fully Tested |
| Roland Juno-106 | Focusrite Scarlett | 🧪 Community Tested |
| Moog Subsequent 37 | Universal Audio Apollo | 🧪 Community Tested |
Want to add your setup? Open an issue with your test results!
Batcherbird uses a unique blocking command architecture specifically designed for professional audio on macOS:
- Core Audio Engine: Rust-based sampling engine with sub-millisecond timing
- Persistent Streams: Single audio stream per recording session (prevents WAV corruption)
- MIDI Safety: Automatic panic messages prevent stuck notes
- Thread-Safe: Dedicated audio threads with channel communication
See Technical Documentation for detailed architecture.
We welcome contributions! Areas where we need help:
- Linux Support: Porting the audio engine to ALSA/JACK
- Windows Support: DirectSound/WASAPI implementation
- More Hardware Testing: Expand our compatibility matrix
- UI/UX Improvements: Better visual design and workflow
See IMPLEMENTATION_PRD.md for technical implementation details.
- macOS Only: Currently supports macOS only (Linux/Windows planned for v0.3)
- Audio Permission: Requires microphone permission for recording
- Export Formats: Professional sampler format export planned for v0.2
MIT License - see LICENSE for details.
- Built with Tauri for native performance
- Audio powered by CPAL and Core Audio
- MIDI handling via midir
- Inspired by professional sampling workflows, built for the open-source community
Professional auto-sampling shouldn't be locked behind expensive commercial tools.
Batcherbird makes high-quality hardware sampling accessible to everyone.
