#include "tools/bpmcalculator.h" #include #include #include constexpr microsec MICROSECONDS_IN_MINUTE = 60000000; BPMCalculator::BPMCalculator(const std::shared_ptr& music) : _music(music), _previous_click_offset(0) {} void BPMCalculator::setMusic(const std::shared_ptr& music) { _deltas.clear(); _previous_click_offset = 0; _music = music; } std::shared_ptr BPMCalculator::music() const { return _music; } void BPMCalculator::start() { _deltas.clear(); _previous_click_offset = 0; } void BPMCalculator::click() { const microsec click_offset = _music->fetchOffset(); std::cout << click_offset << "\n\n\n\n"; if (_previous_click_offset == 0) { _previous_click_offset = click_offset; return; } const microsec delta = click_offset - _previous_click_offset; _deltas.emplace_back(delta); _previous_click_offset = click_offset; } int BPMCalculator::getCurrentApproximation() const { const microsec sum = std::accumulate(_deltas.begin(), _deltas.end(), 0); std::cout << "S: " << sum << " _deltas.size(): " << _deltas.size(); std::cout << "\n " << (static_cast(sum) / static_cast(_deltas.size())) << '\n'; return (sum == 0 || _deltas.size() < 8) ? 0. : static_cast(static_cast(MICROSECONDS_IN_MINUTE) / (static_cast(sum) / static_cast(_deltas.size()))); }