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.

25 lines
689 B
C++

#include "tools/beatutils.h"
#include <numeric>
#include <iostream>
auto beat_utils::calculateBeatRateInfo(const std::vector<microsec>& approximate_deltas) -> BeatInfo
{
if (approximate_deltas.empty())
return {};
const microsec sum = std::accumulate(approximate_deltas.begin(), approximate_deltas.end(), 0);
const std::size_t amount = approximate_deltas.size();
long double average = static_cast<long double>(sum)
/ static_cast<long double>(amount);
const int bpm = static_cast<int>(60000000. / average);
return BeatInfo
{
bpm,
static_cast<microsec>(1. / static_cast<long double>(bpm) * 60000000.)
};
}