#ifndef SCHEDULE_H_EF7B9D12 #define SCHEDULE_H_EF7B9D12 class Schedule { public: explicit Schedule( double bpm) : bpm_(bpm), bps_(bpm_ / 60.0), tick_(1.0 / bps_) { } double getBPM() const { return bpm_; } double getBPS() const { return bps_; } void accumulate(double dt) { accum_ += dt; } bool step() { if (accum_ > tick_) { accum_ -= tick_; beats_++; return true; } else { return false; } } size_t getBeat() const { return beats_; } private: double bpm_; double bps_; double tick_; double accum_ = 0.0; size_t beats_ = 0; }; #endif /* end of include guard: SCHEDULE_H_EF7B9D12 */