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,
106 static constexpr auto kBusLayoutId =
"busLayout"sv;
107 static constexpr auto kPurposeId =
"purpose"sv;
108 static constexpr auto kRequiresLimitingId =
"requiresLimiting"sv;
109 friend void to_json (nlohmann::json &j,
const AudioPort &port)
111 to_json (j,
static_cast<const Port &
> (port));
112 j[kBusLayoutId] = port.layout_;
113 j[kPurposeId] = port.purpose_;
114 j[kRequiresLimitingId] = port.requires_limiting_;
116 friend void from_json (
const nlohmann::json &j,
AudioPort &port)
118 from_json (j,
static_cast<Port &
> (port));
119 j.at (kBusLayoutId).get_to (port.layout_);
120 j.at (kPurposeId).get_to (port.purpose_);
121 j.at (kRequiresLimitingId).get_to (port.requires_limiting_);
128 uint8_t num_channels_{};
136 bool requires_limiting_{};
141 std::unique_ptr<juce::AudioSampleBuffer> buf_;
152 std::vector<RingBuffer<float>> audio_ring_;
154 BOOST_DESCRIBE_CLASS (
159 (layout_, purpose_, requires_limiting_))