Process audio networks for a specific channel.
Processes all audio-sink networks registered to the specified channel and returns their combined output data.
126{
128 return {};
129 }
130
131 std::vector<std::vector<double>> all_network_outputs;
132
135 for (auto& network : audio_it->second) {
136 if (!network || !network->is_enabled()) {
137 continue;
138 }
139
140 if (!network->is_registered_on_channel(
channel)) {
141 continue;
142 }
143
144 if (!network->is_processed_this_cycle()) {
145 network->mark_processing(true);
146 network->process_batch(num_samples);
147 network->mark_processing(false);
148 network->mark_processed(true);
149 }
150
151 const auto& net_buffer = network->get_audio_buffer();
153 if (network->needs_channel_routing()) {
154 double scale = network->get_routing_state().amount[
channel];
155 if (scale == 0.0)
156 continue;
157
158 if (scale == 1.0) {
159 all_network_outputs.push_back(*net_buffer);
160 } else {
161 std::vector<double> scaled_buffer = *net_buffer;
162 for (auto& sample : scaled_buffer)
164
165 all_network_outputs.push_back(std::move(scaled_buffer));
166 }
167 } else {
168 all_network_outputs.push_back(*net_buffer);
169 }
170 }
171 }
172 }
173
175 return all_network_outputs;
176}
bool preprocess_networks(ProcessingToken token)
Preprocess networks for a specific token.
void postprocess_networks(ProcessingToken token, std::optional< uint32_t > channel)
Postprocess networks for a specific token and channel.
std::unordered_map< ProcessingToken, std::vector< std::shared_ptr< Network::NodeNetwork > > > m_audio_networks
Audio-sink networks Only populated for networks with OutputMode::AUDIO_SINK.
Tendency< D, float > scale(const Tendency< D, float > &t, float factor)
Uniform scaling of a scalar-output tendency.
@ AUDIO_SINK
Aggregated audio samples sent to output.