46 uint32_t default_out_channels = 2,
47 uint32_t default_in_channels = 0,
48 uint32_t default_buffer_size = 512,
50 ProcessingToken default_graphics_token = ProcessingToken::GRAPHICS_BACKEND);
68 void process_all_tokens();
80 uint32_t processing_units,
81 const std::vector<double>& node_output_data = {});
87 [[nodiscard]] std::vector<ProcessingToken> get_active_tokens()
const;
113 uint32_t channel = 0);
120 std::shared_ptr<RootGraphicsBuffer> get_root_graphics_buffer(
130 [[nodiscard]]
const std::vector<double>& get_buffer_data(
ProcessingToken token, uint32_t channel)
const;
171 ensure_channels(
token, num_channels);
172 resize_buffers(
token, buffer_size);
181 std::shared_ptr<BufferProcessingChain> get_processing_chain(
ProcessingToken token, uint32_t channel);
187 std::shared_ptr<BufferProcessingChain> get_global_processing_chain();
200 const std::shared_ptr<Buffer>& buffer,
202 uint32_t channel = 0);
211 const std::shared_ptr<Buffer>& buffer,
213 uint32_t channel = 0);
221 [[nodiscard]]
const std::vector<std::shared_ptr<AudioBuffer>>& get_buffers(
ProcessingToken token, uint32_t channel)
const;
228 [[nodiscard]]
const std::vector<std::shared_ptr<VKBuffer>>& get_graphics_buffers(
ProcessingToken token)
const;
236 [[nodiscard]] std::vector<std::shared_ptr<VKBuffer>> get_buffers_by_usage(
249 template <
typename BufferType,
typename... Args>
252 auto& unit = m_unit_manager->ensure_and_get_audio_unit(
token, channel);
253 auto buffer = std::make_shared<BufferType>(channel, unit.buffer_size, std::forward<Args>(args)...);
255 if (
auto audio_buffer = std::dynamic_pointer_cast<AudioBuffer>(buffer)) {
256 add_buffer(audio_buffer,
token, channel);
270 template <
typename BufferType,
typename... Args>
273 auto& unit = m_unit_manager->get_or_create_graphics_unit(
token);
274 auto buffer = std::make_shared<BufferType>(std::forward<Args>(args)...);
276 if (
auto vk_buffer = std::dynamic_pointer_cast<VKBuffer>(buffer)) {
277 add_buffer(vk_buffer,
token);
293 const std::shared_ptr<BufferProcessor>& processor,
303 const std::shared_ptr<BufferProcessor>& processor,
313 const std::shared_ptr<BufferProcessor>& processor,
321 void remove_processor(
322 const std::shared_ptr<BufferProcessor>& processor,
323 const std::shared_ptr<Buffer>& buffer);
331 void remove_processor_from_channel(
332 const std::shared_ptr<BufferProcessor>& processor,
341 void remove_processor_from_token(
342 const std::shared_ptr<BufferProcessor>& processor,
350 void set_final_processor(
351 const std::shared_ptr<BufferProcessor>& processor,
376 const std::shared_ptr<Nodes::Node>& node,
380 bool clear_before =
false);
383 const std::shared_ptr<Nodes::Node>& node,
384 const std::shared_ptr<AudioBuffer>& buffer,
386 bool clear_before =
true);
392 void fill_from_interleaved(
393 const double* interleaved_data,
396 uint32_t num_channels);
398 void fill_interleaved(
399 double* interleaved_data,
402 uint32_t num_channels)
const;
404 std::vector<std::shared_ptr<AudioBuffer>> clone_buffer_for_channels(
405 const std::shared_ptr<AudioBuffer>& buffer,
406 const std::vector<uint32_t>& channels,
413 void process_input(
double* input_data, uint32_t num_channels, uint32_t num_frames);
415 void register_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t channel);
417 void unregister_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t channel);
423 bool supply_buffer_to(
424 const std::shared_ptr<AudioBuffer>& buffer,
429 bool remove_supplied_buffer(
430 const std::shared_ptr<AudioBuffer>& buffer,
438 void initialize_buffer_service();
443 void terminate_active_buffers();