18class Metronome :
public QObject,
public AudioSampleProcessor
21 Q_PROPERTY (
float volume READ volume WRITE setVolume NOTIFY volumeChanged)
22 Q_PROPERTY (
bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
29 juce::AudioSampleBuffer emphasis_sample,
30 juce::AudioSampleBuffer normal_sample,
31 bool initially_enabled =
true,
32 float initial_volume = 1.f,
33 QObject * parent =
nullptr);
39 float volume ()
const {
return volume_.load (); }
40 void setVolume (
float volume)
45 volume_.store (volume);
46 Q_EMIT volumeChanged (volume);
48 Q_SIGNAL
void volumeChanged (
float volume);
50 bool enabled ()
const {
return enabled_.load (); }
51 void setEnabled (
bool enabled)
56 enabled_.store (enabled);
57 Q_EMIT enabledChanged (enabled);
59 Q_SIGNAL
void enabledChanged (
bool enabled);
66 const dsp::TempoMap &tempo_map)
noexcept override;
68 void custom_prepare_for_processing (
70 units::sample_rate_t sample_rate,
71 units::sample_u32_t max_block_length)
override;
84 void find_and_queue_metronome_samples (
85 const dsp::TempoMap &tempo_map,
86 units::sample_t start_pos,
87 units::sample_t end_pos,
88 units::sample_t loffset);
93 void queue_metronome_countin (
96 const dsp::TempoMap &tempo_map);
103 void queue_metronome (
105 units::sample_t offset,
106 std::source_location loc = std::source_location::current ());
110 juce::AudioSampleBuffer emphasis_sample_buffer_;
113 juce::AudioSampleBuffer normal_sample_buffer_;
118 std::atomic<float> volume_;
120 std::atomic_bool enabled_;
void custom_process_block(dsp::graph::EngineProcessTimeInfo time_nfo, const dsp::ITransport &transport, const dsp::TempoMap &tempo_map) noexcept override
Custom processor logic after processing all owned parameters.