NAP
sequenceplayeraudioclock.h
1 #pragma once
2 
3 #include "sequenceserviceaudio.h"
4 
5 #include <audio/utility/audiotypes.h>
6 #include <sequenceplayerclock.h>
7 #include <audio/core/process.h>
8 #include <concurrentqueue.h>
9 
10 namespace nap
11 {
13 
14  // forward declares
15  class SequenceServiceAudio;
16  class SequencePlayerAudioClockProcess;
17 
23  class NAPAPI SequencePlayerAudioClock final : public SequencePlayerClock
24  {
25  RTTI_ENABLE(SequencePlayerClock);
26  public:
32 
33  // make this class explicitly non-copyable
35  SequencePlayerAudioClock& operator =(const SequencePlayerAudioClock&) = delete;
36 
40  void onDestroy() override;
41 
46  void start(Slot<double>& updateSlot) override;
47 
52  void stop() override;
53 
54  private:
55  // reference to SequenceAudioService
56  SequenceServiceAudio& mService;
57 
58  // update slot, updates sequence player
59  Slot<double> mUpdateSlot;
60 
61  // the audio clock process
63  };
64 
65  // shortcut to factory function
67 
73  class NAPAPI SequencePlayerAudioClockProcess final : public audio::Process
74  {
75  RTTI_ENABLE(audio::Process)
76  public:
78 
79  /*
80  * We need to delete these so that the compiler doesn't try to use them. Otherwise we get compile errors on vector<unique_ptr>.
81  */
84 
89 
95  void connectSlot(Slot<double>& slot);
96 
102  void disconnectUpdateSlot(Slot<double>& slot);
103 
104  // Signals
106  protected:
110  void process() override;
111 
112  private:
113  // last known timestamp in samples
115 
116  // queue of tasks to perform on process()
117  moodycamel::ConcurrentQueue<std::function<void()>> mTasks;
118  };
119 
120 }
nap::SequencePlayerAudioClock
Definition: sequenceplayeraudioclock.h:23
nap::audio::Process
Definition: process.h:36
nap::Slot< double >
nap::rtti::ObjectCreator
Definition: factory.h:49
nap::SequencePlayerAudioClockProcess::mUpdateSignal
Signal< double > mUpdateSignal
Definition: sequenceplayeraudioclock.h:105
nap::SequenceServiceAudio
Definition: sequenceserviceaudio.h:23
nap::Signal< double >
nap::audio::NodeManager
Definition: audionodemanager.h:33
nap::audio::SafeOwner
Definition: safeptr.h:25
nap::audio::DiscreteTimeValue
nap::uint64 DiscreteTimeValue
Definition: audiotypes.h:125
nap
Definition: templateapp.h:17
nap::SequencePlayerAudioClockProcess
Definition: sequenceplayeraudioclock.h:73
nap::SequencePlayerClock
Definition: sequenceplayerclock.h:26