48 uint32_t default_out_channels = 2,
49 uint32_t default_in_channels = 0,
50 uint64_t default_sample_rate = 48000,
51 uint32_t default_buffer_size = 512,
53 ProcessingToken default_graphics_token = ProcessingToken::GRAPHICS_BACKEND);
71 void process_all_tokens();
83 uint32_t processing_units,
84 const std::vector<double>& node_output_data = {});
90 [[nodiscard]] std::vector<ProcessingToken> get_active_tokens()
const;
116 uint32_t channel = 0);
123 std::shared_ptr<RootGraphicsBuffer> get_root_graphics_buffer(
132 std::vector<double>& get_buffer_data(
ProcessingToken token, uint32_t channel);
133 [[nodiscard]]
const std::vector<double>& get_buffer_data(
ProcessingToken token, uint32_t channel)
const;
181 ensure_channels(token, num_channels);
182 resize_buffers(token, buffer_size);
191 std::shared_ptr<BufferProcessingChain> get_processing_chain(
ProcessingToken token, uint32_t channel);
197 std::shared_ptr<BufferProcessingChain> get_global_processing_chain();
210 const std::shared_ptr<Buffer>& buffer,
212 uint32_t channel = 0);
221 const std::shared_ptr<Buffer>& buffer,
223 uint32_t channel = 0);
231 [[nodiscard]]
const std::vector<std::shared_ptr<AudioBuffer>>& get_buffers(
ProcessingToken token, uint32_t channel)
const;
238 [[nodiscard]]
const std::vector<std::shared_ptr<VKBuffer>>& get_graphics_buffers(
ProcessingToken token)
const;
246 [[nodiscard]] std::vector<std::shared_ptr<VKBuffer>> get_buffers_by_usage(
259 template <
typename BufferType,
typename... Args>
262 auto& unit = m_unit_manager->ensure_and_get_audio_unit(token, channel);
263 auto buffer = std::make_shared<BufferType>(channel, unit.buffer_size, std::forward<Args>(args)...);
265 if (
auto audio_buffer = std::dynamic_pointer_cast<AudioBuffer>(buffer)) {
266 add_buffer(audio_buffer, token, channel);
280 template <
typename BufferType,
typename... Args>
283 auto& unit = m_unit_manager->get_or_create_graphics_unit(token);
284 auto buffer = std::make_shared<BufferType>(std::forward<Args>(args)...);
286 if (
auto vk_buffer = std::dynamic_pointer_cast<VKBuffer>(buffer)) {
287 add_buffer(vk_buffer, token);
303 const std::shared_ptr<BufferProcessor>& processor,
304 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::AUDIO_BACKEND);
313 const std::shared_ptr<BufferProcessor>& processor,
323 const std::shared_ptr<BufferProcessor>& processor,
332 const std::shared_ptr<BufferProcessor>& processor,
333 const std::shared_ptr<Buffer>& buffer);
341 void remove_processor_from_channel(
342 const std::shared_ptr<BufferProcessor>& processor,
351 void remove_processor_from_token(
352 const std::shared_ptr<BufferProcessor>& processor,
360 void set_final_processor(
361 const std::shared_ptr<BufferProcessor>& processor,
370 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::AUDIO_BACKEND);
374 const std::shared_ptr<Buffer>& buffer,
ProcessingToken token = ProcessingToken::GRAPHICS_BACKEND);
394 const std::shared_ptr<Nodes::Node>& node,
398 bool clear_before =
false);
401 const std::shared_ptr<Nodes::Node>& node,
402 const std::shared_ptr<AudioBuffer>& buffer,
404 bool clear_before =
true);
410 void fill_from_interleaved(
411 const double* interleaved_data,
414 uint32_t num_channels);
416 void fill_interleaved(
417 double* interleaved_data,
420 uint32_t num_channels)
const;
422 std::vector<std::shared_ptr<AudioBuffer>> clone_buffer_for_channels(
423 const std::shared_ptr<AudioBuffer>& buffer,
424 const std::vector<uint32_t>& channels,
431 void process_input(
double* input_data, uint32_t num_channels, uint32_t num_frames);
433 void register_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t channel);
435 void unregister_input_listener(
const std::shared_ptr<AudioBuffer>& buffer, uint32_t channel);
437 [[nodiscard]] uint32_t get_num_input_channels()
const;
439 [[nodiscard]] std::shared_ptr<Buffers::InputAudioBuffer> get_input_buffer(uint32_t channel)
const;
445 bool supply_buffer_to(
446 const std::shared_ptr<AudioBuffer>& buffer,
449 double mix = 1.0,
bool force =
false);
451 bool remove_supplied_buffer(
452 const std::shared_ptr<AudioBuffer>& buffer,
456 void route_buffer_to_channel(
457 const std::shared_ptr<AudioBuffer>& buffer,
458 uint32_t target_channel,
459 uint32_t fade_cycles,
470 void initialize_buffer_service();
475 void terminate_active_buffers();
478 void process_audio_token_default(
ProcessingToken token, uint32_t processing_units);
480 void process_graphics_token_default(
ProcessingToken token, uint32_t processing_units);