"""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