drumscript 0.1.6__tar.gz → 0.2.0__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.0}/MANIFEST.in +1 -7
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.0}/PKG-INFO +161 -77
- {drumscript-0.1.6 → drumscript-0.2.0}/README.md +159 -77
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/__init__.py +91 -17
- drumscript-0.2.0/drumscript/main.py +435 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/notation_generator/score_builder.py +27 -1
- {drumscript-0.1.6 → drumscript-0.2.0/drumscript.egg-info}/PKG-INFO +161 -77
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.0/drumscript.egg-info}/SOURCES.txt +0 -6
- drumscript-0.2.0/drumscript.egg-info/entry_points.txt +2 -0
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.0/drumscript.egg-info}/requires.txt +2 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/pyproject.toml +12 -10
- 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.0}/LICENSE +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/audio_processor/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/audio_processor/audio_loader.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/audio_processor/feature_extractor.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/audio_processor/onset_detector.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/audio_processor/stem_splitter.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/audio_processor/tempo_detector.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/audio_processor/tempogram.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/datasets/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/datasets/base.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/datasets/idmt.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/drum_classifier/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/drum_classifier/classify.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/notation_generator/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/notation_generator/constants.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/notation_generator/helpers.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/notation_generator/midi_exporter.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/notation_generator/pdf_exporter.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/notation_generator/xml_exporter.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/utils/__init__.py +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/drumscript/utils/ffmpeg_installer.py +0 -0
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.0/drumscript.egg-info}/dependency_links.txt +0 -0
- {drumscript-0.1.6/DrumScript.egg-info → drumscript-0.2.0/drumscript.egg-info}/top_level.txt +0 -0
- {drumscript-0.1.6 → drumscript-0.2.0}/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.
|
|
3
|
+
Version: 0.2.0
|
|
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
|
|
@@ -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: weds-19-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 -->
|
|
@@ -106,36 +126,15 @@ Dynamic: license-file
|
|
|
106
126
|
|
|
107
127
|
---
|
|
108
128
|
|
|
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
129
|
|
|
133
130
|
## Project Structure
|
|
131
|
+
*[back](#drumscript)*
|
|
134
132
|
|
|
135
133
|
See [`repository_structure.md`](repository_structure.md) for the full project layout.
|
|
136
134
|
|
|
137
135
|
```
|
|
138
136
|
DrumScript/
|
|
137
|
+
├── benchmarks/ # mir_eval scripts for benchmarking DrumScript
|
|
139
138
|
├── drumscript/ # Main source package
|
|
140
139
|
│ ├── __init__.py # Public API (transcribe, load_audio, etc.)
|
|
141
140
|
│ ├── main.py # CLI entry point
|
|
@@ -146,14 +145,33 @@ DrumScript/
|
|
|
146
145
|
│ └── utils/ # Helpers (ffmpeg installer, research scripts)
|
|
147
146
|
├── benchmarks/ # Evaluation runners (see benchmarks/README.md)
|
|
148
147
|
├── docs/ # Sphinx documentation
|
|
149
|
-
├── tests/ # pytest test suite (
|
|
148
|
+
├── tests/ # pytest test suite (138 unit + 23 integration)
|
|
150
149
|
├── .github/workflows/ # CI/CD (tests, build, publish, docs)
|
|
151
150
|
├── pyproject.toml # Package metadata and dependencies
|
|
152
151
|
└── uv.lock # Pinned dependency versions
|
|
153
152
|
```
|
|
154
153
|
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Features
|
|
157
|
+
*[back](#drumscript)*
|
|
158
|
+
|
|
159
|
+
- **Automatic Drum Transcription:** Detects kicks, snares, hi-hats, toms, and cymbals using a deterministic, rule-based classification engine — no machine learning required.
|
|
160
|
+
- **Tempo Detection:** Automatically estimates BPM using a voting-system algorithm tuned for percussive audio.
|
|
161
|
+
- **Onset Detection:** Onset detection method tuned to the physics of percussion audio rather than polyphonic instruments (piano, guitar, etc.).
|
|
162
|
+
- **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.
|
|
163
|
+
- **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.
|
|
164
|
+
- **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.).
|
|
165
|
+
- **Deterministic Classification:** DrumScript's core classification engine uses physics-based rules derived from acoustic analysis of real drum samples, not probabilistic AI/ML models.
|
|
166
|
+
|
|
167
|
+
> **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.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
|
|
155
172
|
|
|
156
173
|
## Installation
|
|
174
|
+
*[back](#drumscript)*
|
|
157
175
|
|
|
158
176
|
**For users:**
|
|
159
177
|
|
|
@@ -195,6 +213,7 @@ DrumScript manages all dependencies via [`pyproject.toml`](pyproject.toml) using
|
|
|
195
213
|
---
|
|
196
214
|
|
|
197
215
|
## Quick Start
|
|
216
|
+
*[back](#drumscript)*
|
|
198
217
|
|
|
199
218
|
> Please note: DrumScript assumes you are providing **drum audio-only inputs by default**
|
|
200
219
|
|
|
@@ -205,27 +224,35 @@ DrumScript manages all dependencies via [`pyproject.toml`](pyproject.toml) using
|
|
|
205
224
|
```python
|
|
206
225
|
import drumscript as ds
|
|
207
226
|
|
|
208
|
-
# Transcribe an isolated drum stem → PDF
|
|
209
|
-
|
|
227
|
+
# Transcribe an isolated drum stem → PDF + JSON + MIDI
|
|
228
|
+
result = ds.transcribe("drum_audio.wav")
|
|
229
|
+
print(result["pdf_path"]) # PDF sheet music
|
|
230
|
+
print(result["json_path"]) # raw transcription data (JSON)
|
|
231
|
+
print(result["midi_path"]) # MIDI file for DAW import
|
|
210
232
|
|
|
211
233
|
# Transcribe a full song (separates drums automatically)
|
|
212
|
-
|
|
213
|
-
|
|
234
|
+
result = ds.transcribe("full_song.mp3") # drum only audio
|
|
235
|
+
result = ds.transcribe("full_song.mp3", full_song=True) # full song, tells DrumScript to extract the drums first and then transcribe
|
|
214
236
|
|
|
215
|
-
# Get all intermediate results
|
|
237
|
+
# Get all intermediate results (tempo, onsets, events, etc.)
|
|
216
238
|
result = ds.transcribe("drum_audio.wav", verbose=True)
|
|
217
239
|
print(f"Tempo: {result['tempo']:.1f} BPM")
|
|
218
240
|
print(f"Events: {len(result['events'])}")
|
|
241
|
+
print(f"PDF: {result['pdf_path']}")
|
|
242
|
+
print(f"MIDI: {result['midi_path']}")
|
|
219
243
|
```
|
|
220
244
|
|
|
245
|
+
> **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.
|
|
246
|
+
|
|
221
247
|
### Load and explore audio
|
|
222
248
|
|
|
223
249
|
```python
|
|
224
250
|
import drumscript as ds
|
|
225
251
|
|
|
226
252
|
# Load at native sample rate (for notebooks / exploration)
|
|
227
|
-
|
|
228
|
-
print(f"Sample rate: {sr} Hz, Duration: {len(audio)/sr:.1f}s")
|
|
253
|
+
audio, sr = ds.load_audio("drum_audio.wav")
|
|
254
|
+
# print(f"Sample rate: {sr} Hz, Duration: {len(audio)/sr:.1f}s")
|
|
255
|
+
print(f"Sample rate: {audio_file[1]} Hz, Duration: {len(audio_file[0])/audio_file[1]:.1f}s")
|
|
229
256
|
|
|
230
257
|
# Detect tempo
|
|
231
258
|
bpm = ds.detect_tempo("drum_audio.wav")
|
|
@@ -237,45 +264,32 @@ print(f"Tempo: {bpm:.1f} BPM")
|
|
|
237
264
|
```python
|
|
238
265
|
import drumscript as ds
|
|
239
266
|
|
|
240
|
-
# Extract just the drum stem
|
|
241
|
-
|
|
267
|
+
# Extract just the drum stem from full polyphonic audio (let's call it "full_song.wav")
|
|
268
|
+
# Not to be confused with "full_song" flag used in transcribe(), which is for when you want to extract stems before transcribing
|
|
269
|
+
stem_split = ds.extract_stems("full_song.wav")
|
|
242
270
|
|
|
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
271
|
```
|
|
252
272
|
|
|
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.
|
|
273
|
+
### Create drumless backing track to your favourite songs
|
|
258
274
|
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
uv sync --extra dev
|
|
275
|
+
```python
|
|
276
|
+
import drumscript as ds
|
|
262
277
|
|
|
263
|
-
#
|
|
264
|
-
|
|
265
|
-
--root /path/to/IDMT-SMT-DRUMS-V2
|
|
278
|
+
# Remember to use mp3 flag if using mp3 audio
|
|
279
|
+
# default input format is .wav
|
|
266
280
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
281
|
+
remove_drums = ds.extract_stems("full_song.wav",
|
|
282
|
+
drumless=True,
|
|
283
|
+
verbose=True,
|
|
284
|
+
)
|
|
285
|
+
print(f"Files written to: {remove_drums['output_directory']}")
|
|
286
|
+
# The backing track is saved as <input>_no_drums.wav in that directory.
|
|
271
287
|
```
|
|
272
288
|
|
|
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
289
|
---
|
|
277
290
|
|
|
278
291
|
## CLI Usage
|
|
292
|
+
*[back](#drumscript)*
|
|
279
293
|
|
|
280
294
|
DrumScript also provides a command-line interface.
|
|
281
295
|
|
|
@@ -324,11 +338,13 @@ drumscript full_song.mp3 --all-stems --format mp3
|
|
|
324
338
|
# Classify rudiments
|
|
325
339
|
drumscript snare_hit.wav --rudiment
|
|
326
340
|
```
|
|
341
|
+
|
|
327
342
|
---
|
|
328
343
|
|
|
329
344
|
## Contributing
|
|
345
|
+
*[back](#drumscript)*
|
|
330
346
|
|
|
331
|
-
We welcome contributions! DrumScript is intended to be a community-owned project.
|
|
347
|
+
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
348
|
|
|
333
349
|
- **[Open an Issue](https://github.com/DrumScript/DrumScript/issues/new)** for bugs or feature requests.
|
|
334
350
|
- **[Submit a Pull Request](https://github.com/DrumScript/DrumScript/pulls)** for code changes.
|
|
@@ -339,7 +355,7 @@ We welcome contributions! DrumScript is intended to be a community-owned project
|
|
|
339
355
|
**[hello.drumscript@gmail.com](mailto:hello.drumscript@gmail.com)**
|
|
340
356
|
|
|
341
357
|
## Alpha Priorities (v0.0.4 < v1.0.0)
|
|
342
|
-
The alpha phase
|
|
358
|
+
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
359
|
|
|
344
360
|
**What works today:**
|
|
345
361
|
|
|
@@ -357,10 +373,65 @@ The alpha phase runs between 01 June and 31 August 2026
|
|
|
357
373
|
- Stabilising the public API ahead of the beta freeze
|
|
358
374
|
- Community feedback collection
|
|
359
375
|
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
### Publishing a new release
|
|
379
|
+
*[back](#drumscript)*
|
|
380
|
+
|
|
381
|
+
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`).
|
|
382
|
+
|
|
383
|
+
**To publish a release via GitHub Actions (Recommended):**
|
|
384
|
+
1. Go to the **Actions** tab in this repository.
|
|
385
|
+
2. Click on **Create Release** on the left menu.
|
|
386
|
+
3. Click **Run workflow** on the right.
|
|
387
|
+
4. Type in your new version number (e.g., `0.2.0`) and click **Run workflow**. GitHub will handle the rest!
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## Testing
|
|
392
|
+
*[back](#drumscript)*
|
|
393
|
+
|
|
394
|
+
For detailed instructions on testing and publishing via the command line, please see our **[Testing Guidance](tests/README.md).**
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Benchmarking
|
|
399
|
+
*[back](#drumscript)*
|
|
400
|
+
|
|
401
|
+
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.
|
|
402
|
+
|
|
403
|
+
```zsh
|
|
404
|
+
# Install dev dependencies (includes mir_eval)
|
|
405
|
+
uv sync --extra dev
|
|
406
|
+
|
|
407
|
+
# Run the IDMT benchmark
|
|
408
|
+
uv run --extra dev python benchmarks/run.py idmt \
|
|
409
|
+
--root /path/to/IDMT-SMT-DRUMS-V2
|
|
410
|
+
|
|
411
|
+
# Run on a single subset with a limit
|
|
412
|
+
uv run --extra dev python benchmarks/run.py idmt \
|
|
413
|
+
--root /path/to/IDMT-SMT-DRUMS-V2 \
|
|
414
|
+
--subset RealDrum --limit 5
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
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.
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
## Traffic
|
|
422
|
+
*[back](#drumscript)*
|
|
423
|
+
|
|
424
|
+
We collate usage over time for performance-monitoring. Live repository statistics — updated daily:
|
|
425
|
+
|
|
426
|
+
- [**View Report (PDF)**](https://github.com/DrumScript/DrumScript/blob/github-repo-stats/DrumScript/DrumScript/latest-report/report.pdf)
|
|
427
|
+
<!--- [**View Report (HTML)**](https://github.com/DrumScript/DrumScript/blob/github-repo-stats/DrumScript/DrumScript/latest-report/report.html)
|
|
428
|
+
|
|
429
|
+
> 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
430
|
|
|
361
431
|
---
|
|
362
432
|
|
|
363
433
|
## FAQs
|
|
434
|
+
*[back](#drumscript)*
|
|
364
435
|
|
|
365
436
|
### Why doesn't DrumScript include `ffmpeg` as a dependency?
|
|
366
437
|
|
|
@@ -381,20 +452,19 @@ DrumScript's own classification engine is **fully deterministic** — it uses ph
|
|
|
381
452
|
---
|
|
382
453
|
|
|
383
454
|
## Acknowledgements
|
|
455
|
+
*[back](#drumscript)*
|
|
384
456
|
|
|
385
457
|
1. **[Demucs](https://github.com/adefossez/demucs)** — The stem splitting functionality is built upon the work of [@adefossez](https://github.com/adefossez).
|
|
386
458
|
2. **[librosa](https://librosa.org/)** — For foundational audio processing tools.
|
|
387
459
|
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
460
|
|
|
389
|
-
---
|
|
390
|
-
|
|
391
|
-
## License
|
|
392
461
|
|
|
393
|
-
[Apache License 2.0](LICENSE)
|
|
394
462
|
|
|
395
463
|
---
|
|
396
464
|
## Similar Projects
|
|
397
465
|
|
|
466
|
+
*[back](#drumscript)*
|
|
467
|
+
|
|
398
468
|
DrumScript has no affiliation with any of the projects below. They are listed for context and reference.
|
|
399
469
|
|
|
400
470
|
* **[librosa](https://librosa.org/)** — The spectral analysis library that powers DrumScript's onset detection and feature extraction.
|
|
@@ -406,4 +476,18 @@ DrumScript has no affiliation with any of the projects below. They are listed fo
|
|
|
406
476
|
|
|
407
477
|
---
|
|
408
478
|
|
|
479
|
+
## License
|
|
480
|
+
*[back](#drumscript)*
|
|
481
|
+
|
|
482
|
+
**[Apache License 2.0](LICENSE)**
|
|
483
|
+
|
|
484
|
+
**Copyright 2026 DrumScript**
|
|
485
|
+
|
|
486
|
+
Apache License
|
|
487
|
+
Version 2.0, January 2004
|
|
488
|
+
http://www.apache.org/licenses/
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
|
|
409
493
|
<!--END-->
|