40 float automated_value{};
41 float modulated_value{};
46 const auto &
changes ()
const {
return changes_; }
49 friend class ProcessorBase;
52 std::vector<Change> changes_;
55 std::vector<float> prev_values_;
59 void prepare (
size_t count);
71 prev_values_[i] = modulated;
76 void clear () { changes_.clear (); }
80 struct BaseProcessingCache
82 units::sample_rate_t sample_rate_;
83 units::sample_u32_t max_block_length_{};
85 std::vector<dsp::ProcessorParameter *> live_params_;
86 std::vector<dsp::PortPtrVariant> live_input_ports_;
87 std::vector<dsp::PortPtrVariant> live_output_ports_;
89 ParameterChangeTracker change_tracker_;
98 bool is_processing_ =
false;
103 utils::IObjectRegistry ®istry,
104 utils::Utf8String name = { u8
"ProcessorBase" });
106 ~ProcessorBase ()
override;
113 void add_input_port (
const dsp::PortUuidReference &uuid);
114 void add_output_port (
const dsp::PortUuidReference &uuid);
115 void add_parameter (
const dsp::ProcessorParameterUuidReference &uuid);
117 auto &get_input_ports ()
const {
return input_ports_; }
118 auto &get_output_ports ()
const {
return output_ports_; }
119 auto &get_parameters ()
const {
return params_; }
129 assert (processing_caches_ && processing_caches_->is_processing_);
130 return processing_caches_->change_tracker_;
150 const dsp::TempoMap &tempo_map)
noexcept final;
153 units::sample_rate_t sample_rate,
154 units::sample_u32_t max_block_length)
final;
166 dsp::graph::ProcessBlockInfo time_nfo,
168 const dsp::TempoMap &tempo_map) noexcept [[clang::nonblocking]];
170 virtual
void custom_prepare_for_processing (
171 const graph::GraphNode * node,
172 units::sample_rate_t sample_rate,
173 units::sample_u32_t max_block_length)
177 virtual void custom_release_resources () { }
179 auto registry () const ->
utils::IObjectRegistry & {
return registry_; }
182 static constexpr auto kProcessorNameKey =
"processorName"sv;
183 static constexpr auto kInputPortsKey =
"inputPorts"sv;
184 static constexpr auto kOutputPortsKey =
"outputPorts"sv;
185 static constexpr auto kParametersKey =
"parameters"sv;
186 friend void to_json (nlohmann::json &j,
const ProcessorBase &p);
187 friend void from_json (
const nlohmann::json &j, ProcessorBase &p);
190 utils::IObjectRegistry ®istry_;
191 utils::Utf8String name_;
192 std::vector<dsp::PortUuidReference> input_ports_;
193 std::vector<dsp::PortUuidReference> output_ports_;
194 std::vector<dsp::ProcessorParameterUuidReference> params_;
197 std::unique_ptr<BaseProcessingCache> processing_caches_;
199 BOOST_DESCRIBE_CLASS (ProcessorBase, (), (), (), (name_))
virtual void custom_process_block(dsp::graph::ProcessBlockInfo time_nfo, const dsp::ITransport &transport, const dsp::TempoMap &tempo_map) noexcept
Custom processor logic after processing all owned parameters.
void prepare_for_processing(const graph::GraphNode *node, units::sample_rate_t sample_rate, units::sample_u32_t max_block_length) final
Called to allocate resources required for processing.
void process_block(dsp::graph::ProcessBlockInfo time_nfo, const dsp::ITransport &transport, const dsp::TempoMap &tempo_map) noexcept final
Calls custom_process_block() internally after processing all the parameters.