drumscript 0.0.0__tar.gz → 0.1.4__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.
Files changed (37) hide show
  1. drumscript-0.1.4/DrumScript.egg-info/PKG-INFO +311 -0
  2. drumscript-0.1.4/DrumScript.egg-info/SOURCES.txt +36 -0
  3. drumscript-0.1.4/DrumScript.egg-info/entry_points.txt +2 -0
  4. drumscript-0.1.4/DrumScript.egg-info/requires.txt +25 -0
  5. drumscript-0.1.4/LICENSE +203 -0
  6. drumscript-0.1.4/MANIFEST.in +27 -0
  7. drumscript-0.1.4/PKG-INFO +311 -0
  8. drumscript-0.1.4/README.md +250 -0
  9. drumscript-0.1.4/drumscript/__init__.py +438 -0
  10. drumscript-0.1.4/drumscript/audio_processor/audio_loader.py +161 -0
  11. drumscript-0.1.4/drumscript/audio_processor/feature_extractor.py +159 -0
  12. drumscript-0.1.4/drumscript/audio_processor/onset_detector.py +230 -0
  13. drumscript-0.1.4/drumscript/audio_processor/stem_splitter.py +574 -0
  14. drumscript-0.1.4/drumscript/audio_processor/tempo_detector.py +101 -0
  15. drumscript-0.1.4/drumscript/audio_processor/tempogram.py +97 -0
  16. drumscript-0.1.4/drumscript/drum_classifier/__init__.py +0 -0
  17. drumscript-0.1.4/drumscript/drum_classifier/classify.py +1472 -0
  18. drumscript-0.1.4/drumscript/main.py +297 -0
  19. drumscript-0.1.4/drumscript/notation_generator/__init__.py +0 -0
  20. drumscript-0.1.4/drumscript/notation_generator/constants.py +386 -0
  21. drumscript-0.1.4/drumscript/notation_generator/helpers.py +118 -0
  22. drumscript-0.1.4/drumscript/notation_generator/midi_exporter.py +71 -0
  23. drumscript-0.1.4/drumscript/notation_generator/pdf_exporter.py +500 -0
  24. drumscript-0.1.4/drumscript/notation_generator/score_builder.py +126 -0
  25. drumscript-0.1.4/drumscript/notation_generator/xml_exporter.py +54 -0
  26. drumscript-0.1.4/drumscript/utils/__init__.py +0 -0
  27. drumscript-0.1.4/drumscript/utils/ffmpeg_installer.py +136 -0
  28. drumscript-0.1.4/pyproject.toml +143 -0
  29. drumscript-0.0.0/PKG-INFO +0 -9
  30. drumscript-0.0.0/README.md +0 -2
  31. drumscript-0.0.0/drumscript.egg-info/PKG-INFO +0 -9
  32. drumscript-0.0.0/drumscript.egg-info/SOURCES.txt +0 -7
  33. drumscript-0.0.0/pyproject.toml +0 -10
  34. {drumscript-0.0.0/drumscript.egg-info → drumscript-0.1.4/DrumScript.egg-info}/dependency_links.txt +0 -0
  35. {drumscript-0.0.0/drumscript.egg-info → drumscript-0.1.4/DrumScript.egg-info}/top_level.txt +0 -0
  36. {drumscript-0.0.0/drumscript → drumscript-0.1.4/drumscript/audio_processor}/__init__.py +0 -0
  37. {drumscript-0.0.0 → drumscript-0.1.4}/setup.cfg +0 -0
@@ -0,0 +1,311 @@
1
+ Metadata-Version: 2.4
2
+ Name: drumscript
3
+ Version: 0.1.4
4
+ Summary: A Python package to convert drum audio to sheet music.
5
+ Author-email: drumscript-admin <hello.drumscript@gmail.com>
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://drumscript.github.io/DrumScript/
8
+ Project-URL: Documentation, https://drumscript.github.io/DrumScript/
9
+ Project-URL: Repository, https://github.com/DrumScript/DrumScript
10
+ Project-URL: Issues, https://github.com/DrumScript/DrumScript/issues
11
+ Keywords: drum,audio,music,sheet-music,notation,dsp,machine-learning,drumscript,drums,percussion,sound analysis,eq,atd,automatic-drum-transcription
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Development Status :: 3 - Alpha
19
+ Classifier: Intended Audience :: End Users/Desktop
20
+ Classifier: Intended Audience :: Developers
21
+ Classifier: Intended Audience :: Science/Research
22
+ Classifier: Intended Audience :: Other Audience
23
+ Classifier: Topic :: Multimedia :: Sound/Audio
24
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Analysis
25
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Conversion
26
+ Classifier: Topic :: Multimedia :: Sound/Audio :: MIDI
27
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Players
28
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Players :: MP3
29
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Sound Synthesis
30
+ Classifier: Topic :: Scientific/Engineering
31
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
32
+ Classifier: Topic :: Scientific/Engineering :: Physics
33
+ Requires-Python: <3.14,>=3.9
34
+ Description-Content-Type: text/markdown
35
+ License-File: LICENSE
36
+ Requires-Dist: demucs
37
+ Requires-Dist: librosa
38
+ Requires-Dist: matplotlib
39
+ Requires-Dist: music21
40
+ Requires-Dist: numba
41
+ Requires-Dist: numpy<2
42
+ Requires-Dist: pretty-midi
43
+ Requires-Dist: pydub
44
+ Requires-Dist: reportlab
45
+ Requires-Dist: scipy
46
+ Requires-Dist: soundfile
47
+ Requires-Dist: torch<2.9,>=2.4
48
+ Requires-Dist: torchaudio<2.9,>=2.4
49
+ Provides-Extra: dev
50
+ Requires-Dist: ipykernel; extra == "dev"
51
+ Requires-Dist: myst-parser; extra == "dev"
52
+ Requires-Dist: myst-nb>=1.3.0; extra == "dev"
53
+ Requires-Dist: pytest; extra == "dev"
54
+ Requires-Dist: pytest-cov>=7.1.0; extra == "dev"
55
+ Requires-Dist: shibuya>=2025.10.21; extra == "dev"
56
+ Requires-Dist: fastapi>=0.128.8; extra == "dev"
57
+ Requires-Dist: ipywidgets>=8.1.8; extra == "dev"
58
+ Requires-Dist: requests>=2.32.5; extra == "dev"
59
+ Requires-Dist: ruff>=0.15.11; extra == "dev"
60
+ Dynamic: license-file
61
+
62
+ # **`DrumScript`**
63
+
64
+ <!--date_created: sun-15-june-2025-->
65
+ <!--date_edited: tues-19-may-2026--->
66
+
67
+ **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.
68
+
69
+ > **[hello.drumscript@gmail.com](mailto:hello.drumscript@gmail.com)**
70
+
71
+ > **Python >=3.9**
72
+
73
+ ---
74
+
75
+ - **[Features](#features)**
76
+ - **[Installation](#installation)**
77
+ - **[Quick Start](#quick-start)**
78
+ - **[CLI Usage](#cli-usage)**
79
+ - **[Contributing](#contributing)**
80
+ - **[FAQs](#faqs)**
81
+
82
+ **Workflow Status**
83
+
84
+ [![Run Tests](https://github.com/DrumScript/DrumScript/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/DrumScript/DrumScript/actions/workflows/tests.yml)
85
+
86
+ **Demo Notebooks**
87
+
88
+ [![Try DrumScript in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1eDVXc3d6ezmorxINOjzldRPSC3emTl2I)
89
+
90
+ ---
91
+
92
+ ## Features
93
+
94
+ - **Automatic Drum Transcription:** Detects kicks, snares, hi-hats, toms, and cymbals using a deterministic, rule-based classification engine — no machine learning required.
95
+ - **Tempo Detection:** Automatically estimates BPM using a voting-system algorithm tuned for percussive audio.
96
+ - **Onset Detection:** Onset detection method tuned to the physics of percussion audio rather than polyphonic instruments (piano, guitar, etc.).
97
+ - **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.
98
+ - **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.
99
+ - **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.).
100
+ - **Deterministic Classification:** DrumScript's core classification engine uses physics-based rules derived from acoustic analysis of real drum samples, not probabilistic AI/ML models.
101
+
102
+ > **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.
103
+
104
+ ---
105
+
106
+ ## Project Structure
107
+
108
+ See [`repository_structure.md`](repository_structure.md) for the full project layout.
109
+
110
+ ```
111
+ DrumScript/
112
+ ├── drumscript/ # Main source package
113
+ │ ├── __init__.py # Public API (transcribe, load_audio, etc.)
114
+ │ ├── main.py # CLI entry point
115
+ │ ├── audio_processor/ # Audio loading, DSP, stem splitting
116
+ │ ├── drum_classifier/ # Rule-based classification engine
117
+ │ ├── notation_generator/ # Score building, PDF/MIDI/XML export
118
+ │ └── utils/ # Helpers (ffmpeg installer, research scripts)
119
+ ├── docs/ # Sphinx documentation
120
+ ├── tests/ # pytest test suite
121
+ ├── .github/workflows/ # CI/CD (tests, build, publish, docs)
122
+ ├── pyproject.toml # Package metadata and dependencies
123
+ └── uv.lock # Pinned dependency versions
124
+ ```
125
+
126
+
127
+ ## Installation
128
+
129
+ **For users:**
130
+
131
+ ```bash
132
+ pip install drumscript
133
+ ```
134
+
135
+ **For developers:**
136
+
137
+ ```bash
138
+ git clone https://github.com/DrumScript/DrumScript.git
139
+ cd DrumScript
140
+ uv sync # this will create a .venv
141
+ source .venv/bin/activate && uv sync --extra dev
142
+ pytest -m "not slow"
143
+ ```
144
+
145
+ DrumScript manages all dependencies via [`pyproject.toml`](pyproject.toml) using [`uv`](https://docs.astral.sh/uv/). There is no `requirements.txt`.
146
+
147
+ ### System dependencies
148
+
149
+ - **ffmpeg** is required for MP3 input/output. WAV-only workflows do not need it.
150
+ - macOS: `brew install ffmpeg`
151
+ - Ubuntu/Debian: `sudo apt-get install ffmpeg libsndfile1`
152
+ - Windows: [Download from ffmpeg.org](https://ffmpeg.org/download.html) and add to PATH.
153
+ - Or use the built-in helper: `import drumscript as ds; ds.install_ffmpeg()`
154
+
155
+ - **PortAudio** is required by `sounddevice` for audio playback.
156
+ - macOS: `brew install portaudio`
157
+ - Ubuntu/Debian: `sudo apt-get install libportaudio2`
158
+ - Windows: Usually bundled with the `sounddevice` wheel.
159
+
160
+ ---
161
+
162
+ ## Quick Start
163
+
164
+ ### End-to-end transcription
165
+
166
+ ```python
167
+ import drumscript as ds
168
+
169
+ # Transcribe an isolated drum stem → PDF
170
+ pdf_path = ds.transcribe("drum_audio.wav")
171
+
172
+ # Transcribe a full song (separates drums automatically)
173
+ pdf_path = ds.transcribe("full_song.mp3", full_song=True)
174
+
175
+ # Get all intermediate results
176
+ result = ds.transcribe("drum_audio.wav", full=True)
177
+ print(f"Tempo: {result['tempo']:.1f} BPM")
178
+ print(f"Events: {len(result['events'])}")
179
+ ```
180
+
181
+ ### Load and explore audio
182
+
183
+ ```python
184
+ import drumscript as ds
185
+
186
+ # Load at native sample rate (for notebooks / exploration)
187
+ audio_file = ds.load_audio("drum_audio.wav")
188
+ print(f"Sample rate: {sr} Hz, Duration: {len(audio)/sr:.1f}s")
189
+
190
+ # Detect tempo
191
+ bpm = ds.detect_tempo("drum_audio.wav")
192
+ print(f"Tempo: {bpm:.1f} BPM")
193
+ ```
194
+
195
+ ### Extract stems
196
+
197
+ ```python
198
+ import drumscript as ds
199
+
200
+ # Extract just the drum stem
201
+ drum_path = ds.extract_stems("full_song.mp3")
202
+
203
+ # Create a drumless backing track in MP3
204
+ results = ds.extract_stems(
205
+ "full_song.mp3",
206
+ drumless=True,
207
+ output_format="mp3",
208
+ full=True,
209
+ )
210
+ print(f"Backing track: {results['mix']}")
211
+ ```
212
+
213
+ ---
214
+
215
+ ## CLI Usage
216
+
217
+ DrumScript also provides a command-line interface.
218
+
219
+ ### Basic transcription (isolated drum stem)
220
+
221
+ ```bash
222
+ drumscript drum_audio.wav
223
+ ```
224
+
225
+ ### Full song transcription (auto-separates drums)
226
+
227
+ ```bash
228
+ drumscript full_song.mp3 --full
229
+ ```
230
+
231
+ ### Extract a drumless backing track
232
+
233
+ ```bash
234
+ drumscript full_song.mp3 --drumless
235
+ ```
236
+
237
+ ### All options
238
+
239
+ ```bash
240
+ drumscript <audio_file> [OPTIONS]
241
+
242
+ Options:
243
+ --full Transcribe a full song (isolates drums first via Demucs)
244
+ --drumless Extract a drumless backing track
245
+ --mute STEM Mute a specific stem (e.g. --mute bass). Repeatable.
246
+ --all-stems Export all individual stems (drums, bass, vocals, other)
247
+ --format FORMAT Output format for stems: wav (default) or mp3 (requires ffmpeg to be installed)
248
+ --rudiment Optimise classification for isolated single beats
249
+ --ts SIG Time signature (default: 4/4)
250
+ ```
251
+
252
+ ### Examples
253
+
254
+ ```bash
255
+ # Transcribe with 6/8 time signature
256
+ drumscript drum_audio.wav --ts 6/8
257
+
258
+ # Extract all stems as MP3
259
+ drumscript full_song.mp3 --all-stems --format mp3
260
+
261
+ # Classify rudiments
262
+ drumscript snare_hit.wav --rudiment
263
+ ```
264
+ ---
265
+
266
+ ## Contributing
267
+
268
+ We welcome contributions! DrumScript is intended to be a community-owned project.
269
+
270
+ - **[Open an Issue](https://github.com/DrumScript/DrumScript/issues/new)** for bugs or feature requests.
271
+ - **[Submit a Pull Request](https://github.com/DrumScript/DrumScript/pulls)** for code changes.
272
+ - See **[CONTRIBUTING.md](CONTRIBUTING.md)** for the full contributor guide.
273
+
274
+ > All bug reports and feature requests must be filed as GitHub Issues. All code changes must be submitted as Pull Requests. Keeping discussion public helps everyone.
275
+
276
+ ---
277
+
278
+ ## FAQs
279
+
280
+ ### Why doesn't DrumScript include `ffmpeg` as a dependency?
281
+
282
+ ffmpeg is a system-level program, not a Python library, so it cannot be declared in `pyproject.toml`. It must be installed on the operating system. DrumScript provides an `install_ffmpeg()` helper to make this easier.
283
+
284
+ ### What normalisation is applied to loaded audio?
285
+
286
+ `load_audio()` applies **peak normalisation** after loading. It converts the audio to mono and scales it so the loudest sample is at 1.0. This is a linear operation — no audio detail is lost.
287
+
288
+ ### What is `hop_length`?
289
+
290
+ When analysing audio, librosa slides a small analysis window across the signal. The `hop_length` is how many samples the window advances per step. DrumScript uses `HOP_LENGTH = 128`, which at 44100 Hz gives a time resolution of ~2.9 milliseconds — fast enough to capture individual drum hits.
291
+
292
+ ### Does DrumScript use AI/machine learning?
293
+
294
+ DrumScript's own classification engine is **fully deterministic** — it uses physics-based rules, not neural networks. However, the optional stem separation feature uses [Demucs](https://github.com/adefossez/demucs), which is a deep learning model by Meta/Facebook.
295
+
296
+ ---
297
+
298
+ ## Acknowledgements
299
+
300
+ - **[Demucs](https://github.com/adefossez/demucs)** — The stem splitting functionality is built upon the work of [@adefossez](https://github.com/adefossez).
301
+ - **[librosa](https://librosa.org/)** — For foundational audio processing tools.
302
+
303
+ ---
304
+
305
+ ## License
306
+
307
+ [Apache License 2.0](LICENSE)
308
+
309
+ ---
310
+
311
+ <!--END-->
@@ -0,0 +1,36 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ DrumScript.egg-info/PKG-INFO
6
+ DrumScript.egg-info/SOURCES.txt
7
+ DrumScript.egg-info/dependency_links.txt
8
+ DrumScript.egg-info/entry_points.txt
9
+ DrumScript.egg-info/requires.txt
10
+ DrumScript.egg-info/top_level.txt
11
+ drumscript/__init__.py
12
+ drumscript/main.py
13
+ drumscript.egg-info/PKG-INFO
14
+ drumscript.egg-info/SOURCES.txt
15
+ drumscript.egg-info/dependency_links.txt
16
+ drumscript.egg-info/entry_points.txt
17
+ drumscript.egg-info/requires.txt
18
+ drumscript.egg-info/top_level.txt
19
+ drumscript/audio_processor/__init__.py
20
+ drumscript/audio_processor/audio_loader.py
21
+ drumscript/audio_processor/feature_extractor.py
22
+ drumscript/audio_processor/onset_detector.py
23
+ drumscript/audio_processor/stem_splitter.py
24
+ drumscript/audio_processor/tempo_detector.py
25
+ drumscript/audio_processor/tempogram.py
26
+ drumscript/drum_classifier/__init__.py
27
+ drumscript/drum_classifier/classify.py
28
+ drumscript/notation_generator/__init__.py
29
+ drumscript/notation_generator/constants.py
30
+ drumscript/notation_generator/helpers.py
31
+ drumscript/notation_generator/midi_exporter.py
32
+ drumscript/notation_generator/pdf_exporter.py
33
+ drumscript/notation_generator/score_builder.py
34
+ drumscript/notation_generator/xml_exporter.py
35
+ drumscript/utils/__init__.py
36
+ drumscript/utils/ffmpeg_installer.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ drumscript = drumscript.main:main
@@ -0,0 +1,25 @@
1
+ demucs
2
+ librosa
3
+ matplotlib
4
+ music21
5
+ numba
6
+ numpy<2
7
+ pretty-midi
8
+ pydub
9
+ reportlab
10
+ scipy
11
+ soundfile
12
+ torch<2.9,>=2.4
13
+ torchaudio<2.9,>=2.4
14
+
15
+ [dev]
16
+ ipykernel
17
+ myst-parser
18
+ myst-nb>=1.3.0
19
+ pytest
20
+ pytest-cov>=7.1.0
21
+ shibuya>=2025.10.21
22
+ fastapi>=0.128.8
23
+ ipywidgets>=8.1.8
24
+ requests>=2.32.5
25
+ ruff>=0.15.11
@@ -0,0 +1,203 @@
1
+ Copyright 2026 DrumScript
2
+
3
+ Apache License
4
+ Version 2.0, January 2004
5
+ http://www.apache.org/licenses/
6
+
7
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
8
+
9
+ 1. Definitions.
10
+
11
+ "License" shall mean the terms and conditions for use, reproduction,
12
+ and distribution as defined by Sections 1 through 9 of this document.
13
+
14
+ "Licensor" shall mean the copyright owner or entity authorized by
15
+ the copyright owner that is granting the License.
16
+
17
+ "Legal Entity" shall mean the union of the acting entity and all
18
+ other entities that control, are controlled by, or are under common
19
+ control with that entity. For the purposes of this definition,
20
+ "control" means (i) the power, direct or indirect, to cause the
21
+ direction or management of such entity, whether by contract or
22
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
23
+ outstanding shares, or (iii) beneficial ownership of such entity.
24
+
25
+ "You" (or "Your") shall mean an individual or Legal Entity
26
+ exercising permissions granted by this License.
27
+
28
+ "Source" form shall mean the preferred form for making modifications,
29
+ including but not limited to software source code, documentation
30
+ source, and configuration files.
31
+
32
+ "Object" form shall mean any form resulting from mechanical
33
+ transformation or translation of a Source form, including but
34
+ not limited to compiled object code, generated documentation,
35
+ and conversions to other media types.
36
+
37
+ "Work" shall mean the work of authorship, whether in Source or
38
+ Object form, made available under the License, as indicated by a
39
+ copyright notice that is included in or attached to the work
40
+ (an example is provided in the Appendix below).
41
+
42
+ "Derivative Works" shall mean any work, whether in Source or Object
43
+ form, that is based on (or derived from) the Work and for which the
44
+ editorial revisions, annotations, elaborations, or other modifications
45
+ represent, as a whole, an original work of authorship. For the purposes
46
+ of this License, Derivative Works shall not include works that remain
47
+ separable from, or merely link (or bind by name) to the interfaces of,
48
+ the Work and Derivative Works thereof.
49
+
50
+ "Contribution" shall mean any work of authorship, including
51
+ the original version of the Work and any modifications or additions
52
+ to that Work or Derivative Works thereof, that is intentionally
53
+ submitted to Licensor for inclusion in the Work by the copyright owner
54
+ or by an individual or Legal Entity authorized to submit on behalf of
55
+ the copyright owner. For the purposes of this definition, "submitted"
56
+ means any form of electronic, verbal, or written communication sent
57
+ to the Licensor or its representatives, including but not limited to
58
+ communication on electronic mailing lists, source code control systems,
59
+ and issue tracking systems that are managed by, or on behalf of, the
60
+ Licensor for the purpose of discussing and improving the Work, but
61
+ excluding communication that is conspicuously marked or otherwise
62
+ designated in writing by the copyright owner as "Not a Contribution."
63
+
64
+ "Contributor" shall mean Licensor and any individual or Legal Entity
65
+ on behalf of whom a Contribution has been received by Licensor and
66
+ subsequently incorporated within the Work.
67
+
68
+ 2. Grant of Copyright License. Subject to the terms and conditions of
69
+ this License, each Contributor hereby grants to You a perpetual,
70
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
71
+ copyright license to reproduce, prepare Derivative Works of,
72
+ publicly display, publicly perform, sublicense, and distribute the
73
+ Work and such Derivative Works in Source or Object form.
74
+
75
+ 3. Grant of Patent License. Subject to the terms and conditions of
76
+ this License, each Contributor hereby grants to You a perpetual,
77
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
78
+ (except as stated in this section) patent license to make, have made,
79
+ use, offer to sell, sell, import, and otherwise transfer the Work,
80
+ where such license applies only to those patent claims licensable
81
+ by such Contributor that are necessarily infringed by their
82
+ Contribution(s) alone or by combination of their Contribution(s)
83
+ with the Work to which such Contribution(s) was submitted. If You
84
+ institute patent litigation against any entity (including a
85
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
86
+ or a Contribution incorporated within the Work constitutes direct
87
+ or contributory patent infringement, then any patent licenses
88
+ granted to You under this License for that Work shall terminate
89
+ as of the date such litigation is filed.
90
+
91
+ 4. Redistribution. You may reproduce and distribute copies of the
92
+ Work or Derivative Works thereof in any medium, with or without
93
+ modifications, and in Source or Object form, provided that You
94
+ meet the following conditions:
95
+
96
+ (a) You must give any other recipients of the Work or
97
+ Derivative Works a copy of this License; and
98
+
99
+ (b) You must cause any modified files to carry prominent notices
100
+ stating that You changed the files; and
101
+
102
+ (c) You must retain, in the Source form of any Derivative Works
103
+ that You distribute, all copyright, patent, trademark, and
104
+ attribution notices from the Source form of the Work,
105
+ excluding those notices that do not pertain to any part of
106
+ the Derivative Works; and
107
+
108
+ (d) If the Work includes a "NOTICE" text file as part of its
109
+ distribution, then any Derivative Works that You distribute must
110
+ include a readable copy of the attribution notices contained
111
+ within such NOTICE file, excluding those notices that do not
112
+ pertain to any part of the Derivative Works, in at least one
113
+ of the following places: within a NOTICE text file distributed
114
+ as part of the Derivative Works; within the Source form or
115
+ documentation, if provided along with the Derivative Works; or,
116
+ within a display generated by the Derivative Works, if and
117
+ wherever such third-party notices normally appear. The contents
118
+ of the NOTICE file are for informational purposes only and
119
+ do not modify the License. You may add Your own attribution
120
+ notices within Derivative Works that You distribute, alongside
121
+ or as an addendum to the NOTICE text from the Work, provided
122
+ that such additional attribution notices cannot be construed
123
+ as modifying the License.
124
+
125
+ You may add Your own copyright statement to Your modifications and
126
+ may provide additional or different license terms and conditions
127
+ for use, reproduction, or distribution of Your modifications, or
128
+ for any such Derivative Works as a whole, provided Your use,
129
+ reproduction, and distribution of the Work otherwise complies with
130
+ the conditions stated in this License.
131
+
132
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
133
+ any Contribution intentionally submitted for inclusion in the Work
134
+ by You to the Licensor shall be under the terms and conditions of
135
+ this License, without any additional terms or conditions.
136
+ Notwithstanding the above, nothing herein shall supersede or modify
137
+ the terms of any separate license agreement you may have executed
138
+ with Licensor regarding such Contributions.
139
+
140
+ 6. Trademarks. This License does not grant permission to use the trade
141
+ names, trademarks, service marks, or product names of the Licensor,
142
+ except as required for reasonable and customary use in describing the
143
+ origin of the Work and reproducing the content of the NOTICE file.
144
+
145
+ 7. Disclaimer of Warranty. Unless required by applicable law or
146
+ agreed to in writing, Licensor provides the Work (and each
147
+ Contributor provides its Contributions) on an "AS IS" BASIS,
148
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
149
+ implied, including, without limitation, any warranties or conditions
150
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
151
+ PARTICULAR PURPOSE. You are solely responsible for determining the
152
+ appropriateness of using or redistributing the Work and assume any
153
+ risks associated with Your exercise of permissions under this License.
154
+
155
+ 8. Limitation of Liability. In no event and under no legal theory,
156
+ whether in tort (including negligence), contract, or otherwise,
157
+ unless required by applicable law (such as deliberate and grossly
158
+ negligent acts) or agreed to in writing, shall any Contributor be
159
+ liable to You for damages, including any direct, indirect, special,
160
+ incidental, or consequential damages of any character arising as a
161
+ result of this License or out of the use or inability to use the
162
+ Work (including but not limited to damages for loss of goodwill,
163
+ work stoppage, computer failure or malfunction, or any and all
164
+ other commercial damages or losses), even if such Contributor
165
+ has been advised of the possibility of such damages.
166
+
167
+ 9. Accepting Warranty or Additional Liability. While redistributing
168
+ the Work or Derivative Works thereof, You may choose to offer,
169
+ and charge a fee for, acceptance of support, warranty, indemnity,
170
+ or other liability obligations and/or rights consistent with this
171
+ License. However, in accepting such obligations, You may act only
172
+ on Your own behalf and on Your sole responsibility, not on behalf
173
+ of any other Contributor, and only if You agree to indemnify,
174
+ defend, and hold each Contributor harmless for any liability
175
+ incurred by, or claims asserted against, such Contributor by reason
176
+ of your accepting any such warranty or additional liability.
177
+
178
+ END OF TERMS AND CONDITIONS
179
+
180
+ APPENDIX: How to apply the Apache License to your work.
181
+
182
+ To apply the Apache License to your work, attach the following
183
+ boilerplate notice, with the fields enclosed by brackets "[]"
184
+ replaced with your own identifying information. (Don't include
185
+ the brackets!) The text should be enclosed in the appropriate
186
+ comment syntax for the file format. We also recommend that a
187
+ file or class name and description of purpose be included on the
188
+ same "printed page" as the copyright notice for easier
189
+ identification within third-party archives.
190
+
191
+ Copyright [yyyy] [name of copyright owner]
192
+
193
+ Licensed under the Apache License, Version 2.0 (the "License");
194
+ you may not use this file except in compliance with the License.
195
+ You may obtain a copy of the License at
196
+
197
+ http://www.apache.org/licenses/LICENSE-2.0
198
+
199
+ Unless required by applicable law or agreed to in writing, software
200
+ distributed under the License is distributed on an "AS IS" BASIS,
201
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
202
+ See the License for the specific language governing permissions and
203
+ limitations under the License.
@@ -0,0 +1,27 @@
1
+ # MANIFEST.in
2
+ # Exclude compiled Python files
3
+ global-exclude *.py[cod]
4
+ global-exclude __pycache__
5
+
6
+ # Exclude macOS system files
7
+ global-exclude .DS_Store
8
+
9
+ # Exclude all log files anywhere in the project
10
+ global-exclude *.log
11
+
12
+ # Prune development and test directories entirely from the source distribution
13
+ prune docs
14
+ prune local_tests
15
+ prune tests
16
+ prune test_audio
17
+ prune machine-learning
18
+ prune labeled_datasets
19
+ prune .archive
20
+ prune .development
21
+ prune logs
22
+ prune outputs
23
+ prune terraform
24
+ prune visuals
25
+ prune .testing
26
+ prune branch_note
27
+ exclude Makefile