Augmentations

Training-time transforms applied to the train split only — validation always sees a fixed, unaugmented clip, so eval numbers stay comparable epoch to epoch. Configured under each training config’s augmentations: block (see Configuration); the top-level augmentations.enabled flag gates all of them at once.

Augmentation

What it does

Config path

Random crop

Draws the fixed-duration clip at a random offset into the track on every access. When disabled (including for validation, which always has this off), the clip is instead a fixed window from the middle of the track rather than the start, since intros are often sparse/atypical and less representative for eval. Beat/one/last annotation times are shifted to stay aligned with whichever window was picked. Beat-phase/beat-only training only (BeatDataset); the tempo pipeline doesn’t crop (whole-clip regression). Lives outside the augmentations: block and is implemented at the dataset level rather than in the augmenter pipeline below, since it needs the full, uncropped waveform to pick an offset from.

data.random_crop (beat configs only, default true)

Time stretch

Randomly speeds up or slows down the clip (via resampling) by a rate drawn from [min_rate, max_rate]. Pitch shifts as a side effect. Tempo pipeline: scales the scalar tempo label by the same rate. Beat-phase pipeline: resamples the frame target’s time axis by the same rate so beat/one/last/mask events stay aligned with the stretched audio.

augmentations.time_stretch.{enabled,min_rate,max_rate}

Gain

Scales waveform amplitude by a random gain drawn uniformly from [min_db, max_db].

augmentations.gain.{enabled,min_db,max_db}

Noise

Adds white Gaussian noise at a fixed standard deviation std (relative to full-scale ±1 audio). Disabled by default in every training config.

augmentations.noise.{enabled,std}

Two augmenter classes apply the waveform ops (time stretch, gain, noise) in that order: TempoAugmenter for the scalar-label tempo pipeline, BeatPhaseAugmenter for the frame-level beat pipeline — the latter additionally carries the frame target through the time-stretch step. Both are built from the same augmentations: config shape via build_augmenter() / build_beat_phase_augmenter(), which return None (skip wrapping entirely) if nothing ends up enabled.

augmentations

Waveform augmentations for tempo estimation training.