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;
122 std::shared_ptr<RootGraphicsBuffer> get_root_graphics_buffer(
180 ensure_channels(token, num_channels);
181 resize_buffers(token, buffer_size);
196 std::shared_ptr<BufferProcessingChain> get_global_processing_chain();
209 const std::shared_ptr<Buffer>& buffer,
220 const std::shared_ptr<Buffer>& buffer,
230 [[nodiscard]]
const std::vector<std::shared_ptr<AudioBuffer>>& get_buffers(
ProcessingToken token, uint32_t
channel)
const;
237 [[nodiscard]]
const std::vector<std::shared_ptr<VKBuffer>>& get_graphics_buffers(
ProcessingToken token)
const;
245 [[nodiscard]] std::vector<std::shared_ptr<VKBuffer>> get_buffers_by_usage(
258 template <
typename BufferType,
typename... Args>
261 auto& unit = m_unit_manager->ensure_and_get_audio_unit(token,
channel);
262 auto buffer = std::make_shared<BufferType>(
channel, unit.buffer_size, std::forward<Args>(args)...);
264 if (
auto audio_buffer = std::dynamic_pointer_cast<AudioBuffer>(buffer)) {
265 add_buffer(audio_buffer, token,
channel);
279 template <
typename BufferType,
typename... Args>
282 auto& unit = m_unit_manager->get_or_create_graphics_unit(token);
283 auto buffer = std::make_shared<BufferType>(std::forward<Args>(args)...);
285 if (
auto vk_buffer = std::dynamic_pointer_cast<VKBuffer>(buffer)) {
286 add_buffer(vk_buffer, token);
302 const std::shared_ptr<BufferProcessor>& processor,
303 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::AUDIO_BACKEND);
312 const std::shared_ptr<BufferProcessor>& processor,
322 const std::shared_ptr<BufferProcessor>& processor,
331 const std::shared_ptr<BufferProcessor>& processor,
332 const std::shared_ptr<Buffer>& buffer);
340 void remove_processor_from_channel(
341 const std::shared_ptr<BufferProcessor>& processor,
350 void remove_processor_from_token(
351 const std::shared_ptr<BufferProcessor>& processor,
359 void set_final_processor(
360 const std::shared_ptr<BufferProcessor>& processor,
369 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::AUDIO_BACKEND);
373 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::GRAPHICS_BACKEND);
393 const std::shared_ptr<Nodes::Node>& node,
397 bool clear_before =
false);
400 const std::shared_ptr<Nodes::Node>& node,
401 const std::shared_ptr<AudioBuffer>& buffer,
403 bool clear_before =
true);
409 void fill_from_interleaved(
410 const double* interleaved_data,
413 uint32_t num_channels);
415 void fill_interleaved(
416 double* interleaved_data,
419 uint32_t num_channels)
const;
421 std::vector<std::shared_ptr<AudioBuffer>> clone_buffer_for_channels(
422 const std::shared_ptr<AudioBuffer>& buffer,
423 const std::vector<uint32_t>& channels,
430 void process_input(
double* input_data, uint32_t num_channels, uint32_t num_frames);
432 void register_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t
channel);
434 void unregister_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t
channel);
440 bool supply_buffer_to(
441 const std::shared_ptr<AudioBuffer>& buffer,
444 double mix = 1.0,
bool force =
false);
446 bool remove_supplied_buffer(
447 const std::shared_ptr<AudioBuffer>& buffer,
451 void route_buffer_to_channel(
452 const std::shared_ptr<AudioBuffer>& buffer,
453 uint32_t target_channel,
454 uint32_t fade_cycles,
465 void initialize_buffer_service();
470 void terminate_active_buffers();
473 void process_audio_token_default(
ProcessingToken token, uint32_t processing_units);
475 void process_graphics_token_default(
ProcessingToken token, uint32_t processing_units);