A Python package for drum transcription using ADTOF and MDX23C models. This tool can automatically transcribe drum patterns from audio files and output them as MIDI files.
The MDX23c model was developed by Kuielab
The drum stem variant was published by Jarredou here: https://github.com/jarredou/models
The ADTOF transcription model was published by Zehren et al here: https://github.com/MZehren/ADTOF.
My Pytorch port of their weights is here: https://github.com/xavriley/ADTOF-pytorch
- Source Separation: Automatically separates drums from full mixes using MDX23C
- Drum Stem Separation: Separates drum kit into individual components (kick, snare, hi-hat, cymbals, toms)
- MIDI Transcription: Converts drum audio to MIDI using ADTOF models
- Velocity Mapping: Maps audio energy to MIDI velocities
- Hi-hat Detection: Distinguishes between open and closed hi-hat
- Batch Processing: Process multiple audio files at once
- CLI Interface: Easy-to-use command-line interface
pip install adtof-plus-drum-transcriptiongit clone <repository-url>
cd adtof-plus-drum-transcription
pip install -e .This package depends on:
- MDX23C for drum separation
- ADTOF-pytorch for drum transcription
- Essential audio processing libraries (essentia, numpy, scipy)
# Transcribe a single audio file
adtof-transcribe --audio_path song.wav --output_path drums.mid
# Process all audio files in a directory
adtof-transcribe --audio_path /path/to/songs/ --output_path /path/to/output/--audio_path: Path to audio file or directory (supports .wav, .mp3, .flac)--output_path: Output MIDI file or directory--input_is_mix: Input is a full mix requiring drum separation (default: True)--no-input_is_mix: Input is isolated drums, no separation needed--default_threshold: Threshold for onset detection (default: -inf)
# Process isolated drums (skip source separation)
adtof-transcribe --audio_path drums.wav --output_path drums.mid --no-input_is_mix
# Use custom threshold for onset detection
adtof-transcribe --audio_path song.wav --output_path drums.mid --default_threshold -30
# Batch process all files in a folder
adtof-transcribe --audio_path ./audio_files/ --output_path ./midi_output/from adtof_plus_drum_transcription import transcribe_audio_file
# Transcribe a single file
transcribe_audio_file(
audio_path="song.wav",
output_path="drums.mid",
input_is_mix=True,
default_threshold=-float('inf')
)- Source Separation (if
input_is_mix=True): Uses MDX23C to extract drums from full mix - Stem Separation: Separates drum kit into kick, snare, hi-hat, cymbals, and toms
- Transcription: Uses ADTOF models to detect drum onsets and convert to MIDI
- Velocity Mapping: Maps audio energy to MIDI velocities with different curves for different drums
- Hi-hat Processing: Analyzes sustain patterns to distinguish open vs closed hi-hat
- MIDI Export: Combines all drum parts into a single MIDI file
- Input: WAV, MP3, FLAC
- Output: MIDI (.mid)
- Python 3.8+
- 64-bit system (required for some dependencies)
- Sufficient RAM for audio processing (8GB+ recommended)
MIT License
Contributions are welcome! Please feel free to submit a Pull Request.