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