38class PortObserver :
public QObject,
public ProcessorBase
41 Q_DISABLE_COPY_MOVE (PortObserver)
43 static constexpr size_t kAudioRingSeconds = 5;
44 static constexpr size_t kMidiRingSize = 8192;
48 PortUuid observed_port_uuid ()
const {
return observed_port_uuid_; }
49 const Port &observed_port ()
const;
51 int num_channels ()
const {
return static_cast<int> (audio_rings_.size ()); }
56 assert (ch >= 0 && ch <
static_cast<int> (audio_rings_.size ()));
57 assert (audio_rings_[ch] !=
nullptr);
58 return *audio_rings_[ch];
62 assert (ch >= 0 && ch <
static_cast<int> (audio_rings_.size ()));
63 assert (audio_rings_[ch] !=
nullptr);
64 return *audio_rings_[ch];
70 assert (midi_ring_ !=
nullptr);
75 assert (midi_ring_ !=
nullptr);
79 bool has_audio_rings ()
const {
return !audio_rings_.empty (); }
80 bool has_midi_ring ()
const {
return midi_ring_ !=
nullptr; }
83 void custom_process_block (
86 const dsp::TempoMap &tempo_map)
noexcept override;
88 void custom_prepare_for_processing (
90 units::sample_rate_t sample_rate,
91 units::sample_u32_t max_block_length)
override;
93 void custom_release_resources ()
override;
100 [[clang::nonblocking]];
101 void process_midi (
const MidiPort &port)
noexcept [[clang::nonblocking]];
103 PortUuid observed_port_uuid_;
104 ObservedPortPtr typed_port_;
106 std::vector<std::unique_ptr<RingBuffer<float>>> audio_rings_;
107 std::unique_ptr<RingBuffer<RealtimeMidiEvent>> midi_ring_;