33#include <math.h>
44
55int64_t Quantize_GetNearestBeatMs (TrackState * track , int64_t currentMs ) {
6- if (!track || track -> BeatGridCount == 0 || !track -> BeatGrid ) return currentMs ;
6+ if (!track || track -> Analysis . BeatGridCount == 0 || !track -> Analysis . BeatGrid ) return currentMs ;
77
88 // Find closest beat in BeatGrid array
9- int64_t closestBeatMs = (int64_t )track -> BeatGrid [0 ].Time ;
9+ int64_t closestBeatMs = (int64_t )track -> Analysis . BeatGrid [0 ].Time ;
1010 int64_t minDiff = llabs (currentMs - closestBeatMs );
1111
12- for (int i = 1 ; i < track -> BeatGridCount ; i ++ ) {
13- int64_t diff = llabs (currentMs - (int64_t )track -> BeatGrid [i ].Time );
12+ for (int i = 1 ; i < track -> Analysis . BeatGridCount ; i ++ ) {
13+ int64_t diff = llabs (currentMs - (int64_t )track -> Analysis . BeatGrid [i ].Time );
1414 if (diff < minDiff ) {
1515 minDiff = diff ;
16- closestBeatMs = (int64_t )track -> BeatGrid [i ].Time ;
16+ closestBeatMs = (int64_t )track -> Analysis . BeatGrid [i ].Time ;
1717 } else if (diff > minDiff ) {
1818 // Since BeatGrid is sorted, distance starts increasing after we pass the minimum
1919 break ;
@@ -24,30 +24,30 @@ int64_t Quantize_GetNearestBeatMs(TrackState *track, int64_t currentMs) {
2424}
2525
2626int32_t Quantize_GetPhaseErrorMs (TrackState * track , int64_t currentMs ) {
27- if (!track || track -> BeatGridCount == 0 || !track -> BeatGrid ) return 0 ;
27+ if (!track || track -> Analysis . BeatGridCount == 0 || !track -> Analysis . BeatGrid ) return 0 ;
2828 int64_t nearest = Quantize_GetNearestBeatMs (track , currentMs );
2929 return (int32_t )(currentMs - nearest );
3030}
3131
3232int32_t Quantize_GetWaitMs (TrackState * track , int64_t currentMs ) {
33- if (!track || track -> BeatGridCount == 0 || !track -> BeatGrid ) return 0 ;
33+ if (!track || track -> Analysis . BeatGridCount == 0 || !track -> Analysis . BeatGrid ) return 0 ;
3434
3535 // Look forward for the *next* or *current* beat grid marker
36- for (int i = 0 ; i < track -> BeatGridCount ; i ++ ) {
37- if ((int64_t )track -> BeatGrid [i ].Time >= currentMs ) {
38- return (int32_t )((int64_t )track -> BeatGrid [i ].Time - currentMs );
36+ for (int i = 0 ; i < track -> Analysis . BeatGridCount ; i ++ ) {
37+ if ((int64_t )track -> Analysis . BeatGrid [i ].Time >= currentMs ) {
38+ return (int32_t )((int64_t )track -> Analysis . BeatGrid [i ].Time - currentMs );
3939 }
4040 }
4141 return 0 ; // If past end of grids, don't wait
4242}
4343
4444double Quantize_GetBeatDistance (TrackState * track , int64_t currentMs ) {
45- if (!track || track -> BeatGridCount < 2 || !track -> BeatGrid ) return 0.0 ;
45+ if (!track || track -> Analysis . BeatGridCount < 2 || !track -> Analysis . BeatGrid ) return 0.0 ;
4646
47- for (int i = 0 ; i < track -> BeatGridCount - 1 ; i ++ ) {
48- if (currentMs >= (int64_t )track -> BeatGrid [i ].Time && currentMs < (int64_t )track -> BeatGrid [i + 1 ].Time ) {
49- int64_t beatStart = (int64_t )track -> BeatGrid [i ].Time ;
50- int64_t beatEnd = (int64_t )track -> BeatGrid [i + 1 ].Time ;
47+ for (int i = 0 ; i < track -> Analysis . BeatGridCount - 1 ; i ++ ) {
48+ if (currentMs >= (int64_t )track -> Analysis . BeatGrid [i ].Time && currentMs < (int64_t )track -> Analysis . BeatGrid [i + 1 ].Time ) {
49+ int64_t beatStart = (int64_t )track -> Analysis . BeatGrid [i ].Time ;
50+ int64_t beatEnd = (int64_t )track -> Analysis . BeatGrid [i + 1 ].Time ;
5151 int64_t beatLen = beatEnd - beatStart ;
5252 if (beatLen == 0 ) return 0.0 ;
5353 return (double )(currentMs - beatStart ) / (double )beatLen ;
@@ -57,22 +57,23 @@ double Quantize_GetBeatDistance(TrackState *track, int64_t currentMs) {
5757}
5858
5959int Quantize_GetCurrentBeat (TrackState * track , int64_t currentMs ) {
60- if (!track || track -> BeatGridCount == 0 || !track -> BeatGrid ) return 1 ;
61- for (int i = 0 ; i < track -> BeatGridCount ; i ++ ) {
62- if ((int64_t )track -> BeatGrid [i ].Time > currentMs ) {
63- if (i == 0 ) return track -> BeatGrid [0 ].BeatNumber ;
64- return track -> BeatGrid [i - 1 ].BeatNumber ;
60+ if (!track || track -> Analysis . BeatGridCount == 0 || !track -> Analysis . BeatGrid ) return 1 ;
61+ for (int i = 0 ; i < track -> Analysis . BeatGridCount ; i ++ ) {
62+ if ((int64_t )track -> Analysis . BeatGrid [i ].Time > currentMs ) {
63+ if (i == 0 ) return track -> Analysis . BeatGrid [0 ].BeatNumber ;
64+ return track -> Analysis . BeatGrid [i - 1 ].BeatNumber ;
6565 }
6666 }
67- return track -> BeatGrid [track -> BeatGridCount - 1 ].BeatNumber ;
67+ return track -> Analysis . BeatGrid [track -> Analysis . BeatGridCount - 1 ].BeatNumber ;
6868}
6969
7070float Quantize_GetBeatFXLengthMs (TrackState * track , float targetRatio ) {
71- if (!track || track -> BeatGridCount < 2 || !track -> BeatGrid ) return 0.0f ;
71+ if (!track || track -> Analysis . BeatGridCount < 2 || !track -> Analysis . BeatGrid ) return 0.0f ;
7272
7373 // Calculate average ms per beat from the grid
74- int count = track -> BeatGridCount ;
75- float avgBeatLength = (float )(track -> BeatGrid [count - 1 ].Time - track -> BeatGrid [0 ].Time ) / (float )(count - 1 );
74+ int count = track -> Analysis .BeatGridCount ;
75+ if (count < 2 ) return 0.0f ;
76+ float avgBeatLength = (float )(track -> Analysis .BeatGrid [count - 1 ].Time - track -> Analysis .BeatGrid [0 ].Time ) / (float )(count - 1 );
7677
7778 // Fallback if there is an error
7879 if (avgBeatLength <= 0.0f ) return 0.0f ;
0 commit comments