63 Purpose purpose = Purpose::Main);
65 static constexpr size_t AUDIO_RING_SIZE = 65536;
67 [[gnu::hot]]
void process_block (
71 void clear_buffer (std::size_t offset, std::size_t nframes)
override;
73 [[nodiscard]]
auto layout ()
const {
return layout_; }
74 [[nodiscard]]
auto purpose ()
const {
return purpose_; }
75 [[nodiscard]]
auto &buffers ()
const {
return buf_; }
76 [[nodiscard]]
auto &audio_ring_buffers ()
const {
return audio_ring_; }
77 auto num_channels ()
const {
return num_channels_; }
79 void mark_as_requires_limiting () { requires_limiting_ =
true; }
80 auto requires_limiting ()
const {
return requires_limiting_; }
88 float multiplier = 1.f);
93 float multiplier = 1.f);
95 friend void init_from (
97 const AudioPort &other,
102 units::sample_rate_t sample_rate,
107 static constexpr auto kBusLayoutId =
"busLayout"sv;
108 static constexpr auto kPurposeId =
"purpose"sv;
109 static constexpr auto kRequiresLimitingId =
"requiresLimiting"sv;
110 friend void to_json (nlohmann::json &j,
const AudioPort &port)
112 to_json (j,
static_cast<const Port &
> (port));
113 j[kBusLayoutId] = port.layout_;
114 j[kPurposeId] = port.purpose_;
115 j[kRequiresLimitingId] = port.requires_limiting_;
117 friend void from_json (
const nlohmann::json &j,
AudioPort &port)
119 from_json (j,
static_cast<Port &
> (port));
120 j.at (kBusLayoutId).get_to (port.layout_);
121 j.at (kPurposeId).get_to (port.purpose_);
122 j.at (kRequiresLimitingId).get_to (port.requires_limiting_);
129 uint8_t num_channels_{};
137 bool requires_limiting_{};
142 std::unique_ptr<juce::AudioSampleBuffer> buf_;
153 std::vector<RingBuffer<float>> audio_ring_;
155 BOOST_DESCRIBE_CLASS (
160 (layout_, purpose_, requires_limiting_))
void prepare_for_processing(const graph::GraphNode *node, units::sample_rate_t sample_rate, nframes_t max_block_length) override
Called to allocate resources required for processing.