49 uint32_t default_out_channels = 2,
50 uint32_t default_in_channels = 0,
51 uint64_t default_sample_rate = 48000,
52 uint32_t default_buffer_size = 512,
53 uint32_t default_frame_rate = 60,
55 ProcessingToken default_graphics_token = ProcessingToken::GRAPHICS_BACKEND);
73 void process_all_tokens();
85 uint32_t processing_units,
86 const std::vector<double>& node_output_data = {});
92 [[nodiscard]] std::vector<ProcessingToken> get_active_tokens()
const;
118 uint32_t channel = 0);
125 std::shared_ptr<RootGraphicsBuffer> get_root_graphics_buffer(
134 std::vector<double>& get_buffer_data(
ProcessingToken token, uint32_t channel);
135 [[nodiscard]]
const std::vector<double>& get_buffer_data(
ProcessingToken token, uint32_t channel)
const;
183 ensure_channels(token, num_channels);
184 resize_buffers(token, buffer_size);
193 std::shared_ptr<BufferProcessingChain> get_processing_chain(
ProcessingToken token, uint32_t channel);
199 std::shared_ptr<BufferProcessingChain> get_global_processing_chain();
212 const std::shared_ptr<Buffer>& buffer,
214 uint32_t channel = 0);
223 const std::shared_ptr<Buffer>& buffer,
225 uint32_t channel = 0);
233 [[nodiscard]]
const std::vector<std::shared_ptr<AudioBuffer>>& get_buffers(
ProcessingToken token, uint32_t channel)
const;
240 [[nodiscard]]
const std::vector<std::shared_ptr<VKBuffer>>& get_graphics_buffers(
ProcessingToken token)
const;
248 [[nodiscard]] std::vector<std::shared_ptr<VKBuffer>> get_buffers_by_usage(
261 template <
typename BufferType,
typename... Args>
264 auto& unit = m_unit_manager->ensure_and_get_audio_unit(token, channel);
265 auto buffer = std::make_shared<BufferType>(channel, unit.buffer_size, std::forward<Args>(args)...);
267 if (
auto audio_buffer = std::dynamic_pointer_cast<AudioBuffer>(buffer)) {
268 add_buffer(audio_buffer, token, channel);
282 template <
typename BufferType,
typename... Args>
285 auto& unit = m_unit_manager->get_or_create_graphics_unit(token);
286 auto buffer = std::make_shared<BufferType>(std::forward<Args>(args)...);
288 if (
auto vk_buffer = std::dynamic_pointer_cast<VKBuffer>(buffer)) {
289 add_buffer(vk_buffer, token);
305 const std::shared_ptr<BufferProcessor>& processor,
306 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::AUDIO_BACKEND);
315 const std::shared_ptr<BufferProcessor>& processor,
325 const std::shared_ptr<BufferProcessor>& processor,
334 const std::shared_ptr<BufferProcessor>& processor,
335 const std::shared_ptr<Buffer>& buffer);
343 void remove_processor_from_channel(
344 const std::shared_ptr<BufferProcessor>& processor,
353 void remove_processor_from_token(
354 const std::shared_ptr<BufferProcessor>& processor,
362 void set_final_processor(
363 const std::shared_ptr<BufferProcessor>& processor,
372 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::AUDIO_BACKEND);
376 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::GRAPHICS_BACKEND);
396 const std::shared_ptr<Nodes::Node>& node,
400 bool clear_before =
false);
403 const std::shared_ptr<Nodes::Node>& node,
404 const std::shared_ptr<AudioBuffer>& buffer,
406 bool clear_before =
true);
412 void fill_from_interleaved(
413 const double* interleaved_data,
416 uint32_t num_channels);
418 void fill_interleaved(
419 double* interleaved_data,
422 uint32_t num_channels)
const;
424 std::vector<std::shared_ptr<AudioBuffer>> clone_buffer_for_channels(
425 const std::shared_ptr<AudioBuffer>& buffer,
426 const std::vector<uint32_t>& channels,
433 void process_input(
double* input_data, uint32_t num_channels, uint32_t num_frames);
435 void register_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t channel);
437 void unregister_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t channel);
439 [[nodiscard]] uint32_t get_num_input_channels()
const;
441 [[nodiscard]] std::shared_ptr<Buffers::InputAudioBuffer> get_input_buffer(uint32_t channel)
const;
447 bool supply_buffer_to(
448 const std::shared_ptr<AudioBuffer>& buffer,
451 double mix = 1.0,
bool force =
false);
453 bool remove_supplied_buffer(
454 const std::shared_ptr<AudioBuffer>& buffer,
458 void route_buffer_to_channel(
459 const std::shared_ptr<AudioBuffer>& buffer,
460 uint32_t target_channel,
461 uint32_t fade_cycles,
472 void initialize_buffer_service();
477 void terminate_active_buffers();
480 void process_audio_token_default(
ProcessingToken token, uint32_t processing_units);
482 void process_graphics_token_default(
ProcessingToken token, uint32_t processing_units);