Line data Source code
1 : #pragma once
2 :
3 : namespace Amplitron {
4 :
5 : /**
6 : * @brief Interface for metronome engine.
7 : * Satisfies the Dependency Inversion Principle (DIP).
8 : */
9 275 : class IMetronome {
10 : public:
11 814 : virtual ~IMetronome() = default;
12 :
13 : virtual void set_enabled(bool enabled) = 0;
14 : virtual bool is_enabled() const = 0;
15 : virtual void toggle() = 0;
16 :
17 : virtual void set_bpm(int bpm) = 0;
18 : virtual int get_bpm() const = 0;
19 :
20 : virtual void set_volume(float volume) = 0;
21 : virtual float get_volume() const = 0;
22 :
23 : virtual void set_sample_rate(int sample_rate) = 0;
24 : virtual void reset() = 0;
25 :
26 : // Generate next click sample
27 : virtual float next_sample() = 0;
28 : };
29 :
30 : } // namespace Amplitron
|