How it works

Description: This document serves dual purpose:

  1. It outlines the purpose of specific modules in DrumScript, object-wise.

  2. It outlines key definitions to clarify the methodology used.


DrumScript: How it works

audio_processor/

Module overview

This module handles all raw audio manipulation. It is currently the most active part of the package, handling:

  • Stem Splitting (stem_splitter.py): Uses the Demucs source separation model (by adefossez) to isolate drum frequencies from a full audio mix.

  • Tempo Detection (tempo_detector.py): Uses a deterministic “Voting System” to analyse the tempogram and determine the most likely BPM across the entire track.

  • Onset Detection (onset_detector.py): Finds where the drum hits actually occur (i.e., onset_events).

  • Feature Extraction (feature_extractor.py): Extracts numerical features (spectral centroid, bandwidth, zero-crossing rate) from these events for use in the classifier.


drum_classifier/

Module overview

This module is the core logic engine of the package (currently in active R&D). It no longer involves training a model. Instead, it:

  • Takes the numerical features for each drum hit from the audio_processor/ module.

  • Applies a pre-defined set of rules and thresholds (a deterministic classification system) to determine which drum was played.

  • Outputs a structured list of all the classified drum events.

classify.py

This script is the Rule Engine. It contains the core logic for the classification. Its main job is to take the acoustic features of a drum hit and make a decision. Specifically, classify.py:

  • Loads the features extracted for every onset in an audio file.

  • Runs these features through a series of conditional checks (e.g., “if the spectral centroid is below X and the energy is high, classify as a kick drum”).

  • Generates the final list of classified events (e.g., prediction_output.json), detailing what drum was hit and when.

generate_score.py

This is a Utility and Testing Script. It’s designed to quickly visualise the output of the classifier without running the entire application pipeline. Specifically, generate_score.py:

  • Reads the list of classified events produced by classify.py.

  • Uses the notation_generator/ module to convert that list directly into a sheet music file (.pdf)

  • Allows for rapid testing and debugging of the classification rules by providing immediate visual feedback on the transcription quality.