#pragma once #include #include "audio/frame.h" #include "audio/types.h" #include "track/bpm.h" #include "util/math.h" class BeatUtils { public: struct ConstRegion { mixxx::audio::FramePos firstBeat; mixxx::audio::FrameDiff_t beatLength; }; static mixxx::Bpm calculateBpm(const QVector& beats, mixxx::audio::SampleRate sampleRate); static QVector retrieveConstRegions( const QVector& coarseBeats, mixxx::audio::SampleRate sampleRate); static mixxx::Bpm calculateAverageBpm(int numberOfBeats, mixxx::audio::SampleRate sampleRate, mixxx::audio::FramePos lowerFrame, mixxx::audio::FramePos upperFrame); static mixxx::Bpm makeConstBpm( const QVector& constantRegions, mixxx::audio::SampleRate sampleRate, mixxx::audio::FramePos* pFirstBeat); static mixxx::audio::FramePos adjustPhase( mixxx::audio::FramePos firstBeat, mixxx::Bpm bpm, mixxx::audio::SampleRate sampleRate, const QVector& beats); static QVector getBeats(const QVector& constantRegions); static mixxx::Bpm roundBpmWithinRange( mixxx::Bpm minBpm, mixxx::Bpm centerBpm, mixxx::Bpm maxBpm); };