sequencer
clock.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
6 #include <future>
7 #include <type_traits>
8 
10 {
11  class clock_t
12  {
13  public:
14  template < class Sender >
15  explicit clock_t( Sender sender )
16  : clock_done_{start_clock_in_thread(
17  clock_, [sender = std::move( sender )]( auto message ) { sender( message ); } )}
18  {
19  }
20 
22  {
23  clock_.shut_down();
24  }
25 
26  void start_clock()
27  {
28  clock_.start();
29  }
30 
31  void stop_clock()
32  {
33  if ( !clock_.is_running() )
34  {
35  clock_.reset();
36  return;
37  }
38 
39  clock_.stop();
40  }
41 
42  void set_clock_bpm( double value )
43  {
44  clock_.set_tempo( beats_per_minute( value ) );
45  }
46 
47  private:
48  decltype( midi::make_clock() ) clock_ = midi::make_clock();
49  std::future< void > clock_done_;
50  };
51 } // namespace sequencer::backend
~clock_t()
Definition: clock.hpp:21
Definition: beats_per_minute.hpp:8
void start_clock()
Definition: clock.hpp:26
Definition: clock.hpp:9
void set_clock_bpm(double value)
Definition: clock.hpp:42
Definition: clock.hpp:11
void stop_clock()
Definition: clock.hpp:31
clock_t(Sender sender)
Definition: clock.hpp:15
auto start_clock_in_thread(MidiClock &midi_clock, const Sender &sender)
Definition: clock.hpp:123
auto make_clock()
Definition: clock.hpp:114