47 uint32_t default_out_channels = 2,
48 uint32_t default_in_channels = 0,
49 uint64_t default_sample_rate = 48000,
50 uint32_t default_buffer_size = 512,
52 ProcessingToken default_graphics_token = ProcessingToken::GRAPHICS_BACKEND);
70 void process_all_tokens();
82 uint32_t processing_units,
83 const std::vector<double>& node_output_data = {});
89 [[nodiscard]] std::vector<ProcessingToken> get_active_tokens()
const;
115 uint32_t channel = 0);
122 std::shared_ptr<RootGraphicsBuffer> get_root_graphics_buffer(
131 std::vector<double>& get_buffer_data(
ProcessingToken token, uint32_t channel);
132 [[nodiscard]]
const std::vector<double>& get_buffer_data(
ProcessingToken token, uint32_t channel)
const;
173 ensure_channels(token, num_channels);
174 resize_buffers(token, buffer_size);
183 std::shared_ptr<BufferProcessingChain> get_processing_chain(
ProcessingToken token, uint32_t channel);
189 std::shared_ptr<BufferProcessingChain> get_global_processing_chain();
202 const std::shared_ptr<Buffer>& buffer,
204 uint32_t channel = 0);
213 const std::shared_ptr<Buffer>& buffer,
215 uint32_t channel = 0);
223 [[nodiscard]]
const std::vector<std::shared_ptr<AudioBuffer>>& get_buffers(
ProcessingToken token, uint32_t channel)
const;
230 [[nodiscard]]
const std::vector<std::shared_ptr<VKBuffer>>& get_graphics_buffers(
ProcessingToken token)
const;
238 [[nodiscard]] std::vector<std::shared_ptr<VKBuffer>> get_buffers_by_usage(
251 template <
typename BufferType,
typename... Args>
254 auto& unit = m_unit_manager->ensure_and_get_audio_unit(token, channel);
255 auto buffer = std::make_shared<BufferType>(channel, unit.buffer_size, std::forward<Args>(args)...);
257 if (
auto audio_buffer = std::dynamic_pointer_cast<AudioBuffer>(buffer)) {
258 add_buffer(audio_buffer, token, channel);
272 template <
typename BufferType,
typename... Args>
275 auto& unit = m_unit_manager->get_or_create_graphics_unit(token);
276 auto buffer = std::make_shared<BufferType>(std::forward<Args>(args)...);
278 if (
auto vk_buffer = std::dynamic_pointer_cast<VKBuffer>(buffer)) {
279 add_buffer(vk_buffer, token);
295 const std::shared_ptr<BufferProcessor>& processor,
296 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::AUDIO_BACKEND);
305 const std::shared_ptr<BufferProcessor>& processor,
315 const std::shared_ptr<BufferProcessor>& processor,
323 void remove_processor(
324 const std::shared_ptr<BufferProcessor>& processor,
325 const std::shared_ptr<Buffer>& buffer);
333 void remove_processor_from_channel(
334 const std::shared_ptr<BufferProcessor>& processor,
343 void remove_processor_from_token(
344 const std::shared_ptr<BufferProcessor>& processor,
352 void set_final_processor(
353 const std::shared_ptr<BufferProcessor>& processor,
362 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::AUDIO_BACKEND);
366 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::GRAPHICS_BACKEND);
386 const std::shared_ptr<Nodes::Node>& node,
390 bool clear_before =
false);
393 const std::shared_ptr<Nodes::Node>& node,
394 const std::shared_ptr<AudioBuffer>& buffer,
396 bool clear_before =
true);
402 void fill_from_interleaved(
403 const double* interleaved_data,
406 uint32_t num_channels);
408 void fill_interleaved(
409 double* interleaved_data,
412 uint32_t num_channels)
const;
414 std::vector<std::shared_ptr<AudioBuffer>> clone_buffer_for_channels(
415 const std::shared_ptr<AudioBuffer>& buffer,
416 const std::vector<uint32_t>& channels,
423 void process_input(
double* input_data, uint32_t num_channels, uint32_t num_frames);
425 void register_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t channel);
427 void unregister_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t channel);
433 bool supply_buffer_to(
434 const std::shared_ptr<AudioBuffer>& buffer,
439 bool remove_supplied_buffer(
440 const std::shared_ptr<AudioBuffer>& buffer,
444 void route_buffer_to_channel(
445 const std::shared_ptr<AudioBuffer>& buffer,
446 uint32_t target_channel,
447 uint32_t fade_cycles,
458 void initialize_buffer_service();
463 void terminate_active_buffers();
466 void process_audio_token_default(
ProcessingToken token, uint32_t processing_units);
468 void process_graphics_token_default(
ProcessingToken token, uint32_t processing_units);