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);
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;
101 return TimeStamp(real_unit(), beats.to_double() * 1/(double)_beat_rate);
105 return TimeStamp(ticks_unit(), beats.to_double() * (double)_beat_rate * _tick_rate);
109 return TimeStamp(real_unit(), ticks.ticks() * 1/(double)_tick_rate);
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);
160 #endif // RAUL_TIME_SLICE_HPP TimeStamp start_beats() const
Start of current sub-cycle in beats.
Definition: TimeSlice.hpp:123
A type of time stamp.
Definition: TimeStamp.hpp:33
TimeStamp start_ticks() const
Start of current sub-cycle in ticks.
Definition: TimeSlice.hpp:117
void set_slice(TimeStamp start, TimeDuration length)
Set the start and length of the slice.
Definition: TimeSlice.hpp:68
TimeDuration length_beats() const
Length of current sub-cycle in beats.
Definition: TimeSlice.hpp:126
A real-time time stamp (possible units: frame, absolute (s), or beat).
Definition: TimeStamp.hpp:80
A duration of time, with conversion between tick time and beat time.
Definition: TimeSlice.hpp:51
void set_offset(TimeDuration offset)
Set the offset between real-time and timeslice-time.
Definition: TimeSlice.hpp:129
TimeDuration offset_ticks() const
Offset relative to external (e.g Jack) time.
Definition: TimeSlice.hpp:132
TimeDuration length_ticks() const
Length of current sub-cycle in ticks.
Definition: TimeSlice.hpp:120