27 state_ = std::make_shared<ProcessorState>();
28 state_->oversample_amount = max_oversample;
29 state_->control_rate = control_rate;
31 inputs_ = std::make_shared<std::vector<Input*>>();
32 outputs_ = std::make_shared<std::vector<Output*>>();
35 for (
int i = 0; i < num_inputs; ++i)
38 for (
int i = 0; i < num_outputs; ++i)
57 for (
int i = 0; i < num_outputs; ++i) {
59 if (buffer_size > 1 && buffer_size < num_samples)
64 for (
int i = 0; i < num_inputs; ++i) {
66 if (buffer_size > 1 && buffer_size < num_samples)
88 inputs_->at(input_index)->source = source;
105 int num_inputs =
static_cast<int>(
inputs_->size());
115 std::shared_ptr<Input>
input = std::make_shared<Input>();
151 int num_inputs =
static_cast<int>(
inputs_->size());
152 for (
int i = 0; i < num_inputs; ++i) {
171 for (
unsigned int i = 0; i <
inputs_->size(); ++i) {
180 for (
int i = 0; i < source->
numOutputs(); ++i)
183 for (
unsigned int i = 0; i <
inputs_->size(); ++i) {
194 while (current_level) {
195 top_level = current_level;
196 current_level = current_level->
router();
214 while (
inputs_->size() <= index)
232 std::shared_ptr<Output>
output;
234 output = std::make_shared<cr::Output>();
247 std::shared_ptr<Input>
input = std::make_shared<Input>();
Base class for all signal-processing units in Vital.
Definition processor.h:212
std::shared_ptr< ProcessorState > state_
Shared state (sample rate, oversample, etc.)
Definition processor.h:653
virtual void unplugIndex(unsigned int input_index)
Removes the connection at a specified input index, if any.
Definition processor.cpp:161
Processor(int num_inputs, int num_outputs, bool control_rate=false, int max_oversample=1)
Constructs a Processor with a given number of inputs/outputs and oversampling.
Definition processor.cpp:25
force_inline int numOutputs() const
Returns the total number of Output pointers (owned or otherwise).
Definition processor.h:564
force_inline int numInputs() const
Returns the total number of Input pointers (owned or otherwise).
Definition processor.h:557
virtual void numInputsChanged()
Called when the number of inputs changes (e.g., new connections). Subclasses may override for dynamic...
Definition processor.h:501
virtual Output * registerOutput(Output *output, int index)
Registers a new Output in the output list at a specified index.
Definition processor.cpp:223
void plugNext(const Output *source)
Connects an external Output to the first available (unplugged) input.
Definition processor.cpp:104
Input * addInput()
Creates and registers a new Input, initially connected to null_source_.
Definition processor.cpp:246
int plugging_start_
The index at which plugNext starts searching for an unplugged input.
Definition processor.h:655
void useOutput(Output *output)
Uses an existing Output object as this Processor's first output.
Definition processor.cpp:138
virtual bool isPolyphonic() const
Checks if this Processor is polyphonic by querying its ProcessorRouter.
Definition processor.cpp:73
force_inline Input * input(unsigned int index=0) const
Retrieves the Input pointer at a given index.
Definition processor.h:587
void useInput(Input *input)
Uses an existing Input object as this Processor's first input.
Definition processor.cpp:126
virtual void registerInput(Input *input, int index)
Registers a new input, appending it to the input list.
Definition processor.cpp:213
force_inline bool isControlRate() const
Checks if this Processor is running at control rate (buffer_size == 1).
Definition processor.h:342
bool inputMatchesBufferSize(int input=0)
Checks whether the buffer size of a particular input matches the size needed by this Processor.
Definition processor.cpp:42
static const Output null_source_
A null (dummy) source used for unconnected inputs.
Definition processor.h:665
ProcessorRouter * getTopLevelRouter() const
Gets the topmost (root) ProcessorRouter by traversing parent routers.
Definition processor.cpp:190
std::shared_ptr< std::vector< Input * > > inputs_
All inputs, owned or external.
Definition processor.h:660
bool checkInputAndOutputSize(int num_samples)
Checks if all inputs and outputs have buffers big enough for num_samples.
Definition processor.cpp:52
std::vector< std::shared_ptr< Input > > owned_inputs_
Inputs owned by this Processor.
Definition processor.h:657
void plug(const Output *source)
Connects an external Output to this Processor's first input.
Definition processor.cpp:79
int connectedInputs()
Counts how many inputs are connected to a real source (not null_source_).
Definition processor.cpp:149
Output * addOutput(int oversample=1)
Creates and registers a new Output. Handles control rate vs. audio rate.
Definition processor.cpp:231
force_inline Output * output(unsigned int index=0) const
Retrieves the Output pointer at a given index.
Definition processor.h:616
virtual void unplug(const Output *source)
Removes a connection to a given Output from all inputs.
Definition processor.cpp:167
std::shared_ptr< std::vector< Output * > > outputs_
All outputs, owned or external.
Definition processor.h:661
std::vector< std::shared_ptr< Output > > owned_outputs_
Outputs owned by this Processor.
Definition processor.h:658
ProcessorRouter * router_
The ProcessorRouter that manages this Processor.
Definition processor.h:663
force_inline void router(ProcessorRouter *router)
Sets the ProcessorRouter that owns or manages this Processor.
Definition processor.h:507
A specialized Processor that manages a directed graph of Processors and ensures correct processing or...
Definition processor_router.h:34
void disconnect(const Processor *destination, const Output *source)
Disconnects a source Output from a destination Processor.
Definition processor_router.cpp:182
virtual bool isPolyphonic(const Processor *processor) const
Determines if a given Processor is polyphonic within this router.
Definition processor_router.cpp:257
void connect(Processor *destination, const Output *source, int index)
Connects a source Output to a destination Processor input by index.
Definition processor_router.cpp:168
#define VITAL_ASSERT(x)
Definition common.h:11
Contains classes and functions used within the Vital synthesizer framework.
constexpr int kMaxBufferSize
Maximum buffer size for processing.
Definition common.h:39
constexpr int kMaxOversample
Maximum allowed oversampling factor.
Definition common.h:40
Declares the Processor class and related structures for handling audio processing in a polyphonic con...
Declares the ProcessorRouter class, which manages a graph of Processors and their dependencies.
Holds and manages a buffer of samples (poly_float) for a Processor's output.
Definition processor.h:35
Processor * owner
Owning processor.
Definition processor.h:112
int buffer_size
Current buffer size in samples.
Definition processor.h:114