18 #ifndef RAUL_TIME_SLICE_HPP
19 #define RAUL_TIME_SLICE_HPP
24 #include <boost/utility.hpp>
26 #include "raul/TimeStamp.hpp"
53 TimeSlice(uint32_t rate, uint32_t ppqn,
double bpm)
55 , _beat_rate(60.0/bpm)
57 , _length_ticks(
TimeUnit(TimeUnit::FRAMES, rate), 0, 0)
58 , _start_beats(
TimeUnit(TimeUnit::BEATS, ppqn), 0, 0)
59 , _length_beats(
TimeUnit(TimeUnit::BEATS, ppqn), 0, 0)
60 , _offset_ticks(
TimeUnit(TimeUnit::FRAMES, rate), 0, 0)
69 assert(start.unit() == ticks_unit());
70 assert(length.unit() == ticks_unit());
72 _length_ticks = length;
77 assert(length.unit() == ticks_unit());
78 _length_ticks = length;
79 _length_beats = ticks_to_beats(_length_ticks);
82 bool contains(TimeStamp time)
const {
86 double tick_rate()
const {
return _tick_rate; }
87 double beat_rate()
const {
return _beat_rate; }
88 double bpm()
const {
return 60/_beat_rate; }
90 void set_tick_rate(
double tick_rate) {
91 _tick_rate = tick_rate;
95 void set_bpm(
double bpm) {
96 _beat_rate = 60.0/bpm;
100 inline TimeStamp beats_to_seconds(TimeStamp beats)
const {
101 return TimeStamp(real_unit(), beats.to_double() * 1/(
double)_beat_rate);
104 inline TimeStamp beats_to_ticks(TimeStamp beats)
const {
105 return TimeStamp(ticks_unit(), beats.to_double() * (
double)_beat_rate * _tick_rate);
108 inline TimeStamp ticks_to_seconds(TimeStamp ticks)
const {
109 return TimeStamp(real_unit(), ticks.ticks() * 1/(
double)_tick_rate);
112 inline TimeStamp ticks_to_beats(TimeStamp ticks)
const {
113 return TimeStamp(beats_unit(), ticks.ticks() * 1/(
double)_tick_rate * _beat_rate);
134 inline TimeUnit beats_unit()
const {
return _start_beats.unit(); }
135 inline TimeUnit ticks_unit()
const {
return _start_ticks.unit(); }
136 inline TimeUnit real_unit()
const {
return TimeUnit(TimeUnit::SECONDS, 0); }
139 inline void update_beat_time() {
140 _start_beats = ticks_to_beats(_start_ticks);
141 _length_beats = ticks_to_beats(_length_ticks);
149 TimeStamp _start_ticks;
150 TimeDuration _length_ticks;
151 TimeStamp _start_beats;
152 TimeDuration _length_beats;
154 TimeDuration _offset_ticks;
160 #endif // RAUL_TIME_SLICE_HPP