You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
project-kyoku/tools/shared/tools/bpmcalculator.h

37 lines
749 B
C++

#pragma once
#include "tools/music.h"
#include "tools/beatutils.h"
#include <memory>
class BPMCalculator
{
public:
explicit BPMCalculator();
void start();
void stop();
void click(const microsec& offset);
bool calculating() const;
const beat_utils::BeatInfo& fetchApproximatedInfo();
microsec fetchTimeUntilNextBeat(const microsec& offset);
microsec getStartingOffset() const;
void setStartingOffset(microsec offset);
void moveStartingOffsetBy(microsec shift);
private:
bool _need_recalculate;
bool _calculating;
std::vector<microsec> _deltas;
microsec _previous_click_offset;
microsec _first_click_offset;
beat_utils::BeatInfo _approximated_info;
inline void reset();
};