1 #ifndef MSP_DEMOSCENE_SEQUENCER_H_
2 #define MSP_DEMOSCENE_SEQUENCER_H_
5 #include <sigc++/signal.h>
6 #include <msp/time/timedelta.h>
7 #include <msp/time/timestamp.h>
19 virtual void start(float, float) { }
20 virtual void beat(int) { }
21 virtual void tick(float, float) { }
22 virtual void end(float) { }
25 class InterpolationAction: public Action
32 InterpolationAction(bool = false);
35 virtual void start(float, float);
36 virtual void tick(float, float);
37 virtual void end(float);
38 virtual void interpolate(float, float) { }
50 sigc::signal<void> signal_finished;
53 Msp::Time::TimeDelta secs_per_beat;
54 std::vector<Action *> static_actions;
55 std::vector<Segment> segments;
56 std::vector<Segment>::const_iterator begin;
57 std::vector<Segment>::const_iterator end;
63 Sequencer(float = 120.0f);
65 void set_beats_per_minute(float);
66 float get_beats_per_minute() const { return Msp::Time::min/secs_per_beat; }
67 void add_static_action(Action &);
68 void add_action(Action &, float, float);
72 void tick(const Msp::Time::TimeDelta &);
74 void advance_to(float);
75 void update_next_event();
77 float get_current_beat() const { return beat; }