drumscript 0.1.6__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {drumscript-0.1.6 → drumscript-0.2.1}/MANIFEST.in +1 -7
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1}/PKG-INFO +170 -82
- {drumscript-0.1.6 → drumscript-0.2.1}/README.md +167 -81
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/__init__.py +91 -17
- drumscript-0.2.1/drumscript/main.py +435 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/score_builder.py +27 -1
- {drumscript-0.1.6 → drumscript-0.2.1/drumscript.egg-info}/PKG-INFO +170 -82
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1/drumscript.egg-info}/SOURCES.txt +0 -6
- drumscript-0.2.1/drumscript.egg-info/entry_points.txt +2 -0
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1/drumscript.egg-info}/requires.txt +2 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/pyproject.toml +13 -11
- drumscript-0.1.6/DrumScript.egg-info/entry_points.txt +0 -2
- drumscript-0.1.6/drumscript/main.py +0 -307
- {drumscript-0.1.6 → drumscript-0.2.1}/LICENSE +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/audio_loader.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/feature_extractor.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/onset_detector.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/stem_splitter.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/tempo_detector.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/audio_processor/tempogram.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/datasets/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/datasets/base.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/datasets/idmt.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/drum_classifier/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/drum_classifier/classify.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/constants.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/helpers.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/midi_exporter.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/pdf_exporter.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/notation_generator/xml_exporter.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/utils/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/drumscript/utils/ffmpeg_installer.py +0 -0
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1/drumscript.egg-info}/dependency_links.txt +0 -0
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.1/drumscript.egg-info}/top_level.txt +0 -0
- {drumscript-0.1.6 → drumscript-0.2.1}/setup.cfg +0 -0
|
@@ -14,14 +14,8 @@ prune docs
|
|
|
14
14
|
prune local_tests
|
|
15
15
|
prune tests
|
|
16
16
|
prune test_audio
|
|
17
|
-
prune machine-learning
|
|
18
|
-
prune labeled_datasets
|
|
19
17
|
prune .archive
|
|
20
18
|
prune .development
|
|
21
19
|
prune logs
|
|
22
20
|
prune outputs
|
|
23
|
-
prune
|
|
24
|
-
prune visuals
|
|
25
|
-
prune .testing
|
|
26
|
-
prune branch_note
|
|
27
|
-
exclude Makefile
|
|
21
|
+
prune visuals
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drumscript
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: A Python package to convert drum audio to sheet music.
|
|
5
5
|
Author-email: drumscript-admin <hello.drumscript@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -30,7 +30,7 @@ Classifier: Topic :: Multimedia :: Sound/Audio :: Sound Synthesis
|
|
|
30
30
|
Classifier: Topic :: Scientific/Engineering
|
|
31
31
|
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
32
32
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
33
|
-
Requires-Python: <3.
|
|
33
|
+
Requires-Python: <3.13,>=3.9
|
|
34
34
|
Description-Content-Type: text/markdown
|
|
35
35
|
License-File: LICENSE
|
|
36
36
|
Requires-Dist: demucs
|
|
@@ -57,28 +57,48 @@ Requires-Dist: shibuya>=2025.10.21; extra == "dev"
|
|
|
57
57
|
Requires-Dist: ipywidgets>=8.1.8; extra == "dev"
|
|
58
58
|
Requires-Dist: requests>=2.32.5; extra == "dev"
|
|
59
59
|
Requires-Dist: ruff>=0.15.11; extra == "dev"
|
|
60
|
+
Requires-Dist: twine>=6.2.0; extra == "dev"
|
|
61
|
+
Requires-Dist: nbstripout>=0.8.2; extra == "dev"
|
|
60
62
|
Dynamic: license-file
|
|
61
63
|
|
|
62
64
|
# **`DrumScript`**
|
|
63
65
|
|
|
64
66
|
<!--date_created: sun-15-june-2025-->
|
|
65
|
-
<!--date_edited:
|
|
67
|
+
<!--date_edited: thurd-20-august-2026--->
|
|
66
68
|
|
|
67
|
-
**
|
|
68
|
-
|
|
69
|
-
[](https://github.com/DrumScript/DrumScript/actions/workflows/tests.yml)
|
|
69
|
+
**DrumScript** is an open-source Python library and CLI tool for drum audio analysis and transcription. Give it a recording — a full mix or an isolated drum stem — and it will generate PDF sheet music, MIDI files, and MusicXML output. The `DrumScript` model is a **deterministic classifier**, and doesn't use AI/machine learning. Built for drummers and by drummers, it is - and always will be - an open-source community tool.
|
|
70
70
|
|
|
71
|
-
**
|
|
71
|
+
> **Python >=3.9**
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
**Workflow Status**
|
|
74
|
+
>
|
|
75
|
+
[](https://github.com/DrumScript/DrumScript/actions/workflows/tests.yml)
|
|
76
|
+
>
|
|
77
|
+
**[Documentation](https://drumscript.github.io/DrumScript/)**
|
|
78
|
+
>
|
|
79
|
+
> **[Try DrumScript In Colab](https://colab.research.google.com/drive/15yBGu6WURPyiH-sEQ82g_2T2wKqiIPsq)**
|
|
80
|
+
>
|
|
81
|
+
> <a href="https://colab.research.google.com/drive/15yBGu6WURPyiH-sEQ82g_2T2wKqiIPsq" target="_parent"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a>
|
|
74
82
|
|
|
75
|
-
**DrumScript** is an open-source Python library and CLI tool for drum audio analysis and transcription. Give it a recording — a full mix or an isolated drum stem — and it will generate PDF sheet music, MIDI files, and MusicXML output. The `DrumScript` model is a **deterministic classifier**, and doesn't use AI/machine learning. Built for drummers and by drummers, it is - and always will be - an open-source community tool.
|
|
76
83
|
|
|
77
|
-
|
|
84
|
+
- **[Features](#features)**
|
|
85
|
+
- **[Project Structure](#project-structure)**
|
|
86
|
+
- **[Installation](#installation)**
|
|
87
|
+
- **[Quick Start](#quick-start)**
|
|
88
|
+
- **[CLI Usage](#cli-usage)**
|
|
89
|
+
- **[Contributing](#contributing)**
|
|
90
|
+
- **[Testing](#testing)**
|
|
91
|
+
- **[Benchmarking](#benchmarking)**
|
|
92
|
+
- **[Traffic](#traffic)**
|
|
93
|
+
- **[FAQs](#faqs)**
|
|
94
|
+
- **[Changelog](CHANGELOG.md)**
|
|
95
|
+
- **[Acknowledgements](#acknowledgements)**
|
|
96
|
+
- **[Similar projects](#similar-projects)**
|
|
97
|
+
- **[License](#license)**
|
|
78
98
|
|
|
79
|
-
|
|
99
|
+
---
|
|
80
100
|
|
|
81
|
-
**Public Alpha (v0.1.4+) —
|
|
101
|
+
#### **Public Alpha (v0.1.4+) — ongoing since June 2026**
|
|
82
102
|
|
|
83
103
|
- We're looking for early adopters and feedback
|
|
84
104
|
- [Feedback on the classification model](https://github.com/DrumScript/DrumScript/issues), and help shape v1.0.0.
|
|
@@ -87,7 +107,7 @@ Dynamic: license-file
|
|
|
87
107
|
|
|
88
108
|
> See the **[Roadmap](https://drumscript.github.io/DrumScript/guide/roadmap.html)** for what's planned.
|
|
89
109
|
|
|
90
|
-
**What it looks like**
|
|
110
|
+
#### **What it looks like**
|
|
91
111
|
|
|
92
112
|
<!-- TODO: Replace with a GIF showing terminal output-->
|
|
93
113
|
<!-- For now, this shows the PDF transcription output -->
|
|
@@ -96,46 +116,29 @@ Dynamic: license-file
|
|
|
96
116
|
|
|
97
117
|
**Example 1: Simple groove**
|
|
98
118
|
|
|
99
|
-
|
|
119
|
+
<!----->
|
|
120
|
+

|
|
100
121
|
|
|
101
122
|
**Example 2: A well-known Sabbath song**
|
|
102
123
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
124
|
+
<!------>
|
|
125
|
+
<!------>
|
|
126
|
+
<!------>
|
|
127
|
+

|
|
128
|
+

|
|
129
|
+

|
|
106
130
|
|
|
107
131
|
---
|
|
108
132
|
|
|
109
|
-
- **[Features](#features)**
|
|
110
|
-
- **[Installation](#installation)**
|
|
111
|
-
- **[Quick Start](#quick-start)**
|
|
112
|
-
- **[CLI Usage](#cli-usage)**
|
|
113
|
-
- **[Contributing](#contributing)**
|
|
114
|
-
- **[FAQs](#faqs)**
|
|
115
|
-
- **[Similar projects](#similar-projects)**
|
|
116
|
-
|
|
117
|
-
---
|
|
118
|
-
|
|
119
|
-
## Features
|
|
120
|
-
|
|
121
|
-
- **Automatic Drum Transcription:** Detects kicks, snares, hi-hats, toms, and cymbals using a deterministic, rule-based classification engine — no machine learning required.
|
|
122
|
-
- **Tempo Detection:** Automatically estimates BPM using a voting-system algorithm tuned for percussive audio.
|
|
123
|
-
- **Onset Detection:** Onset detection method tuned to the physics of percussion audio rather than polyphonic instruments (piano, guitar, etc.).
|
|
124
|
-
- **Stem Separation:** Uses the state-of-the-art [Demucs](https://github.com/adefossez/demucs) source separation model to isolate drums, bass, vocals, and other instruments from a full mix.
|
|
125
|
-
- **Backing Track Generator:** Automatically remove the drums from any `.mp3` or `.wav` to create a drumless play-along track. Bass-only and vocal-only extraction also supported.
|
|
126
|
-
- **Multiple Output Formats:** Export transcriptions to PDF sheet music, MIDI (`.mid`), and MusicXML (`.xml`) for import into DAWs and notation software (Logic Pro, Cubase, Ableton, MuseScore, Sibelius, etc.).
|
|
127
|
-
- **Deterministic Classification:** DrumScript's core classification engine uses physics-based rules derived from acoustic analysis of real drum samples, not probabilistic AI/ML models.
|
|
128
|
-
|
|
129
|
-
> **Note:** Some dependencies used by DrumScript (e.g. [Demucs](https://github.com/adefossez/demucs), [librosa](https://librosa.org/)) may internally use probabilistic methods. DrumScript's own classification engine is fully deterministic.
|
|
130
|
-
|
|
131
|
-
---
|
|
132
133
|
|
|
133
134
|
## Project Structure
|
|
135
|
+
*[back](#drumscript)*
|
|
134
136
|
|
|
135
137
|
See [`repository_structure.md`](repository_structure.md) for the full project layout.
|
|
136
138
|
|
|
137
139
|
```
|
|
138
140
|
DrumScript/
|
|
141
|
+
├── benchmarks/ # mir_eval scripts for benchmarking DrumScript
|
|
139
142
|
├── drumscript/ # Main source package
|
|
140
143
|
│ ├── __init__.py # Public API (transcribe, load_audio, etc.)
|
|
141
144
|
│ ├── main.py # CLI entry point
|
|
@@ -146,14 +149,33 @@ DrumScript/
|
|
|
146
149
|
│ └── utils/ # Helpers (ffmpeg installer, research scripts)
|
|
147
150
|
├── benchmarks/ # Evaluation runners (see benchmarks/README.md)
|
|
148
151
|
├── docs/ # Sphinx documentation
|
|
149
|
-
├── tests/ # pytest test suite (
|
|
152
|
+
├── tests/ # pytest test suite (138 unit + 23 integration)
|
|
150
153
|
├── .github/workflows/ # CI/CD (tests, build, publish, docs)
|
|
151
154
|
├── pyproject.toml # Package metadata and dependencies
|
|
152
155
|
└── uv.lock # Pinned dependency versions
|
|
153
156
|
```
|
|
154
157
|
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Features
|
|
161
|
+
*[back](#drumscript)*
|
|
162
|
+
|
|
163
|
+
- **Automatic Drum Transcription:** Detects kicks, snares, hi-hats, toms, and cymbals using a deterministic, rule-based classification engine — no machine learning required.
|
|
164
|
+
- **Tempo Detection:** Automatically estimates BPM using a voting-system algorithm tuned for percussive audio.
|
|
165
|
+
- **Onset Detection:** Onset detection method tuned to the physics of percussion audio rather than polyphonic instruments (piano, guitar, etc.).
|
|
166
|
+
- **Stem Separation:** Uses the state-of-the-art [Demucs](https://github.com/adefossez/demucs) source separation model to isolate drums, bass, vocals, and other instruments from a full mix.
|
|
167
|
+
- **Backing Track Generator:** Automatically remove the drums from any `.mp3` or `.wav` to create a drumless play-along track. Bass-only and vocal-only extraction also supported.
|
|
168
|
+
- **Multiple Output Formats:** Export transcriptions to PDF sheet music, MIDI (`.mid`), and MusicXML (`.xml`) for import into DAWs and notation software (Logic Pro, Cubase, Ableton, MuseScore, Sibelius, etc.).
|
|
169
|
+
- **Deterministic Classification:** DrumScript's core classification engine uses physics-based rules derived from acoustic analysis of real drum samples, not probabilistic AI/ML models.
|
|
170
|
+
|
|
171
|
+
> **Note:** Some dependencies used by DrumScript (e.g. [Demucs](https://github.com/adefossez/demucs), [librosa](https://librosa.org/)) may internally use probabilistic methods. DrumScript's own classification engine is fully deterministic.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
|
|
155
176
|
|
|
156
177
|
## Installation
|
|
178
|
+
*[back](#drumscript)*
|
|
157
179
|
|
|
158
180
|
**For users:**
|
|
159
181
|
|
|
@@ -195,6 +217,7 @@ DrumScript manages all dependencies via [`pyproject.toml`](pyproject.toml) using
|
|
|
195
217
|
---
|
|
196
218
|
|
|
197
219
|
## Quick Start
|
|
220
|
+
*[back](#drumscript)*
|
|
198
221
|
|
|
199
222
|
> Please note: DrumScript assumes you are providing **drum audio-only inputs by default**
|
|
200
223
|
|
|
@@ -205,27 +228,35 @@ DrumScript manages all dependencies via [`pyproject.toml`](pyproject.toml) using
|
|
|
205
228
|
```python
|
|
206
229
|
import drumscript as ds
|
|
207
230
|
|
|
208
|
-
# Transcribe an isolated drum stem → PDF
|
|
209
|
-
|
|
231
|
+
# Transcribe an isolated drum stem → PDF + JSON + MIDI
|
|
232
|
+
result = ds.transcribe("drum_audio.wav")
|
|
233
|
+
print(result["pdf_path"]) # PDF sheet music
|
|
234
|
+
print(result["json_path"]) # raw transcription data (JSON)
|
|
235
|
+
print(result["midi_path"]) # MIDI file for DAW import
|
|
210
236
|
|
|
211
237
|
# Transcribe a full song (separates drums automatically)
|
|
212
|
-
|
|
213
|
-
|
|
238
|
+
result = ds.transcribe("full_song.mp3") # drum only audio
|
|
239
|
+
result = ds.transcribe("full_song.mp3", full_song=True) # full song, tells DrumScript to extract the drums first and then transcribe
|
|
214
240
|
|
|
215
|
-
# Get all intermediate results
|
|
241
|
+
# Get all intermediate results (tempo, onsets, events, etc.)
|
|
216
242
|
result = ds.transcribe("drum_audio.wav", verbose=True)
|
|
217
243
|
print(f"Tempo: {result['tempo']:.1f} BPM")
|
|
218
244
|
print(f"Events: {len(result['events'])}")
|
|
245
|
+
print(f"PDF: {result['pdf_path']}")
|
|
246
|
+
print(f"MIDI: {result['midi_path']}")
|
|
219
247
|
```
|
|
220
248
|
|
|
249
|
+
> **Note (v0.2.0):** `transcribe()` now returns a dict with `pdf_path`, `json_path`, and `midi_path` keys. Using the return value as a plain string (e.g. `pdf = ds.transcribe(...)`) still works but is deprecated and will be removed in v1.0.0. Use `result["pdf_path"]` instead.
|
|
250
|
+
|
|
221
251
|
### Load and explore audio
|
|
222
252
|
|
|
223
253
|
```python
|
|
224
254
|
import drumscript as ds
|
|
225
255
|
|
|
226
256
|
# Load at native sample rate (for notebooks / exploration)
|
|
227
|
-
|
|
228
|
-
print(f"Sample rate: {sr} Hz, Duration: {len(audio)/sr:.1f}s")
|
|
257
|
+
audio, sr = ds.load_audio("drum_audio.wav")
|
|
258
|
+
# print(f"Sample rate: {sr} Hz, Duration: {len(audio)/sr:.1f}s")
|
|
259
|
+
print(f"Sample rate: {audio_file[1]} Hz, Duration: {len(audio_file[0])/audio_file[1]:.1f}s")
|
|
229
260
|
|
|
230
261
|
# Detect tempo
|
|
231
262
|
bpm = ds.detect_tempo("drum_audio.wav")
|
|
@@ -237,45 +268,32 @@ print(f"Tempo: {bpm:.1f} BPM")
|
|
|
237
268
|
```python
|
|
238
269
|
import drumscript as ds
|
|
239
270
|
|
|
240
|
-
# Extract just the drum stem
|
|
241
|
-
|
|
271
|
+
# Extract just the drum stem from full polyphonic audio (let's call it "full_song.wav")
|
|
272
|
+
# Not to be confused with "full_song" flag used in transcribe(), which is for when you want to extract stems before transcribing
|
|
273
|
+
stem_split = ds.extract_stems("full_song.wav")
|
|
242
274
|
|
|
243
|
-
# Create a drumless backing track in MP3
|
|
244
|
-
results = ds.extract_stems(
|
|
245
|
-
"full_song.mp3",
|
|
246
|
-
drumless=True,
|
|
247
|
-
output_format="mp3",
|
|
248
|
-
verbose=True,
|
|
249
|
-
)
|
|
250
|
-
print(f"Backing track: {results['mix']}")
|
|
251
275
|
```
|
|
252
276
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
## Benchmarking
|
|
256
|
-
|
|
257
|
-
DrumScript includes a benchmarking framework for evaluating the classifier against standard ADT datasets using [`mir_eval`](https://github.com/mir-evaluation/mir_eval). Currently supports IDMT-SMT-Drums V2.
|
|
277
|
+
### Create drumless backing track to your favourite songs
|
|
258
278
|
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
uv sync --extra dev
|
|
279
|
+
```python
|
|
280
|
+
import drumscript as ds
|
|
262
281
|
|
|
263
|
-
#
|
|
264
|
-
|
|
265
|
-
--root /path/to/IDMT-SMT-DRUMS-V2
|
|
282
|
+
# Remember to use mp3 flag if using mp3 audio
|
|
283
|
+
# default input format is .wav
|
|
266
284
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
285
|
+
remove_drums = ds.extract_stems("full_song.wav",
|
|
286
|
+
drumless=True,
|
|
287
|
+
verbose=True,
|
|
288
|
+
)
|
|
289
|
+
print(f"Files written to: {remove_drums['output_directory']}")
|
|
290
|
+
# The backing track is saved as <input>_no_drums.wav in that directory.
|
|
271
291
|
```
|
|
272
292
|
|
|
273
|
-
Results are archived to `outputs/benchmarks/idmt/` with per-file metrics, summary statistics, and git commit tracking for reproducibility. See [`benchmarks/README.md`](benchmarks/README.md) for dataset setup and full usage.
|
|
274
|
-
|
|
275
|
-
|
|
276
293
|
---
|
|
277
294
|
|
|
278
295
|
## CLI Usage
|
|
296
|
+
*[back](#drumscript)*
|
|
279
297
|
|
|
280
298
|
DrumScript also provides a command-line interface.
|
|
281
299
|
|
|
@@ -324,11 +342,13 @@ drumscript full_song.mp3 --all-stems --format mp3
|
|
|
324
342
|
# Classify rudiments
|
|
325
343
|
drumscript snare_hit.wav --rudiment
|
|
326
344
|
```
|
|
345
|
+
|
|
327
346
|
---
|
|
328
347
|
|
|
329
348
|
## Contributing
|
|
349
|
+
*[back](#drumscript)*
|
|
330
350
|
|
|
331
|
-
We welcome contributions! DrumScript is intended to be a community-owned project.
|
|
351
|
+
We welcome contributions! DrumScript is intended to be a community-owned project. You can also refer to detailed contributor guidance **[here](./docs/development/contributor_guidance.md)**
|
|
332
352
|
|
|
333
353
|
- **[Open an Issue](https://github.com/DrumScript/DrumScript/issues/new)** for bugs or feature requests.
|
|
334
354
|
- **[Submit a Pull Request](https://github.com/DrumScript/DrumScript/pulls)** for code changes.
|
|
@@ -339,7 +359,7 @@ We welcome contributions! DrumScript is intended to be a community-owned project
|
|
|
339
359
|
**[hello.drumscript@gmail.com](mailto:hello.drumscript@gmail.com)**
|
|
340
360
|
|
|
341
361
|
## Alpha Priorities (v0.0.4 < v1.0.0)
|
|
342
|
-
The alpha phase
|
|
362
|
+
The alpha phase began June 2026. We expect it to run through late 2026 and into 2027 — beta is targeted on API stability and benchmark validation rather than a fixed calendar date.
|
|
343
363
|
|
|
344
364
|
**What works today:**
|
|
345
365
|
|
|
@@ -357,10 +377,65 @@ The alpha phase runs between 01 June and 31 August 2026
|
|
|
357
377
|
- Stabilising the public API ahead of the beta freeze
|
|
358
378
|
- Community feedback collection
|
|
359
379
|
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
### Publishing a new release
|
|
383
|
+
*[back](#drumscript)*
|
|
384
|
+
|
|
385
|
+
We use an automated pipeline to publish new versions to PyPI. All releases must use a specific tag format: `vX.Y.Z` (for example, `v0.2.0`).
|
|
386
|
+
|
|
387
|
+
**To publish a release via GitHub Actions (Recommended):**
|
|
388
|
+
1. Go to the **Actions** tab in this repository.
|
|
389
|
+
2. Click on **Create Release** on the left menu.
|
|
390
|
+
3. Click **Run workflow** on the right.
|
|
391
|
+
4. Type in your new version number (e.g., `0.2.0`) and click **Run workflow**. GitHub will handle the rest!
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
## Testing
|
|
396
|
+
*[back](#drumscript)*
|
|
397
|
+
|
|
398
|
+
For detailed instructions on testing and publishing via the command line, please see our **[Testing Guidance](tests/README.md).**
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## Benchmarking
|
|
403
|
+
*[back](#drumscript)*
|
|
404
|
+
|
|
405
|
+
DrumScript includes a benchmarking framework for evaluating the classifier against standard ADT datasets using [`mir_eval`](https://github.com/mir-evaluation/mir_eval). Currently supports IDMT-SMT-Drums V2.
|
|
406
|
+
|
|
407
|
+
```zsh
|
|
408
|
+
# Install dev dependencies (includes mir_eval)
|
|
409
|
+
uv sync --extra dev
|
|
410
|
+
|
|
411
|
+
# Run the IDMT benchmark
|
|
412
|
+
uv run --extra dev python benchmarks/run.py idmt \
|
|
413
|
+
--root /path/to/IDMT-SMT-DRUMS-V2
|
|
414
|
+
|
|
415
|
+
# Run on a single subset with a limit
|
|
416
|
+
uv run --extra dev python benchmarks/run.py idmt \
|
|
417
|
+
--root /path/to/IDMT-SMT-DRUMS-V2 \
|
|
418
|
+
--subset RealDrum --limit 5
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
Results are archived to `outputs/benchmarks/idmt/` with per-file metrics, summary statistics, and git commit tracking for reproducibility. See [`benchmarks/README.md`](benchmarks/README.md) for dataset setup and full usage.
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## Traffic
|
|
426
|
+
*[back](#drumscript)*
|
|
427
|
+
|
|
428
|
+
We collate usage over time for performance-monitoring. Live repository statistics — updated daily:
|
|
429
|
+
|
|
430
|
+
- [**View Report (PDF)**](https://github.com/DrumScript/DrumScript/blob/github-repo-stats/DrumScript/DrumScript/latest-report/report.pdf)
|
|
431
|
+
<!--- [**View Report (HTML)**](https://github.com/DrumScript/DrumScript/blob/github-repo-stats/DrumScript/DrumScript/latest-report/report.html)
|
|
432
|
+
|
|
433
|
+
> Views, clones, stars, forks, top referrers and popular paths. Data collected automatically via [github-repo-stats](https://github.com/jgehrcke/github-repo-stats). Defaults to last 14 days in outputs. Raw data available on **[github-repo-stats](https://github.com/DrumScript/DrumScript/tree/github-repo-stats/DrumScript/DrumScript/ghrs-data**) branch-->
|
|
360
434
|
|
|
361
435
|
---
|
|
362
436
|
|
|
363
437
|
## FAQs
|
|
438
|
+
*[back](#drumscript)*
|
|
364
439
|
|
|
365
440
|
### Why doesn't DrumScript include `ffmpeg` as a dependency?
|
|
366
441
|
|
|
@@ -381,20 +456,19 @@ DrumScript's own classification engine is **fully deterministic** — it uses ph
|
|
|
381
456
|
---
|
|
382
457
|
|
|
383
458
|
## Acknowledgements
|
|
459
|
+
*[back](#drumscript)*
|
|
384
460
|
|
|
385
461
|
1. **[Demucs](https://github.com/adefossez/demucs)** — The stem splitting functionality is built upon the work of [@adefossez](https://github.com/adefossez).
|
|
386
462
|
2. **[librosa](https://librosa.org/)** — For foundational audio processing tools.
|
|
387
463
|
3. **[@nanaoto](https://github.com/nanaoto)** — For building the `mir_eval` benchmarking infrastructure and IDMT-SMT-Drums V2 adapter (PR [#273](https://github.com/DrumScript/DrumScript/pull/273)).
|
|
388
464
|
|
|
389
|
-
---
|
|
390
|
-
|
|
391
|
-
## License
|
|
392
465
|
|
|
393
|
-
[Apache License 2.0](LICENSE)
|
|
394
466
|
|
|
395
467
|
---
|
|
396
468
|
## Similar Projects
|
|
397
469
|
|
|
470
|
+
*[back](#drumscript)*
|
|
471
|
+
|
|
398
472
|
DrumScript has no affiliation with any of the projects below. They are listed for context and reference.
|
|
399
473
|
|
|
400
474
|
* **[librosa](https://librosa.org/)** — The spectral analysis library that powers DrumScript's onset detection and feature extraction.
|
|
@@ -406,4 +480,18 @@ DrumScript has no affiliation with any of the projects below. They are listed fo
|
|
|
406
480
|
|
|
407
481
|
---
|
|
408
482
|
|
|
483
|
+
## License
|
|
484
|
+
*[back](#drumscript)*
|
|
485
|
+
|
|
486
|
+
**[Apache License 2.0](LICENSE)**
|
|
487
|
+
|
|
488
|
+
**Copyright 2026 DrumScript**
|
|
489
|
+
|
|
490
|
+
Apache License
|
|
491
|
+
Version 2.0, January 2004
|
|
492
|
+
http://www.apache.org/licenses/
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
|
|
409
497
|
<!--END-->
|