midmid3 / midmid /offset.py
markury's picture
Initial commit
d171350
"""Offset / silence duration calculation."""
from midmid.beat_tracker import BeatData
def calculate_offset(
beat_data: BeatData,
bpm: float,
beats_per_measure: int = 4,
min_lead_in: float = 2.0,
) -> float:
"""Calculate silence duration to prepend to the audio."""
if len(beat_data.downbeats) == 0:
return min_lead_in
first_downbeat = float(beat_data.downbeats[0])
measure_duration = beats_per_measure * 60.0 / bpm
n = 1
while n * measure_duration < min_lead_in:
n += 1
silence = n * measure_duration - first_downbeat
while silence < 0:
n += 1
silence = n * measure_duration - first_downbeat
return silence