1 #pragma once
2 
3 #include <QVector>
4 
5 #include "audio/types.h"
6 #include "util/math.h"
7 
8 class BeatUtils {
9   public:
10     struct ConstRegion {
11         double firstBeat;
12         double beatLength;
13     };
14 
15     static double calculateBpm(const QVector<double>& beats,
16             mixxx::audio::SampleRate sampleRate);
17 
18     static QVector<ConstRegion> retrieveConstRegions(
19             const QVector<double>& coarseBeats,
20             mixxx::audio::SampleRate sampleRate);
21 
22     static double calculateAverageBpm(int numberOfBeats,
23             mixxx::audio::SampleRate sampleRate,
24             double lowerFrame,
25             double upperFrame);
26 
27     static double makeConstBpm(
28             const QVector<ConstRegion>& constantRegions,
29             mixxx::audio::SampleRate sampleRate,
30             double* pFirstBeat);
31 
32     static double adjustPhase(
33             double firstBeat,
34             double bpm,
35             mixxx::audio::SampleRate sampleRate,
36             const QVector<double>& beats);
37 
38     static QVector<double> getBeats(const QVector<ConstRegion>& constantRegions);
39 
40     static double roundBpmWithinRange(double minBpm, double centerBpm, double maxBpm);
41 };
42