File size: 699 Bytes
d171350 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | """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
|