#pragma once #include #include "config.h" // Virtual base class // Abstraction of BPM detection / setting class Click { public: Click(){} virtual ~Click(){} }; // Internally generated // Configured via: BPM class InternalClick: public Click { public: InternalClick(Config& config): m_bpm(config.get_bpm()){} virtual ~InternalClick(){} private: int m_bpm; }; // Generated from MIDI notes // Configured via channel and note to listen to class NoteClick: public Click { public: NoteClick(Config& config): m_channel(config.get_midi_channel()), m_note(config.get_midi_note()) { } virtual ~NoteClick(){} // signals boost::signals2::signal signal_click; // slots void receive_note(int channel, int note, uint64_t timestamp) { (void) timestamp; if (true || (channel == m_channel && note == m_note)) { signal_click(); } } private: int m_channel; int m_note; }; // Generated from MIDI Clock class ClockClick: public Click { public: ClockClick(){} virtual ~ClockClick(){} };