168class MAYAFLUX_API
BufferPipeline :
public std::enable_shared_from_this<BufferPipeline> {
170 static std::shared_ptr<BufferPipeline>
create(
Vruta::TaskScheduler& scheduler, std::shared_ptr<Buffers::BufferManager> buffer_manager =
nullptr)
172 return std::make_shared<BufferPipeline>(scheduler, std::move(buffer_manager));
187 m_operations.emplace_back(std::move(operation));
199 BufferPipeline& branch_if(std::function<
bool(uint32_t)> condition,
201 bool synchronous =
false, uint64_t samples_per_operation = 1);
208 BufferPipeline& parallel(std::initializer_list<BufferOperation> operations);
217 std::function<
void(uint32_t)> on_cycle_start,
218 std::function<
void(uint32_t)> on_cycle_end);
227 m_execution_strategy = strategy;
238 m_capture_timing = mode;
249 m_process_timing = mode;
267 void execute_buffer_rate(uint64_t max_cycles = 0);
296 void execute_for_cycles(uint64_t cycles = 0);
311 void execute_continuous();
338 void execute_scheduled(uint64_t max_cycles = 0, uint64_t samples_per_operation = 1);
357 void execute_scheduled_at_rate(uint32_t max_cycles = 0,
double seconds_per_operation = 1);
383 void mark_data_consumed(uint32_t operation_index);
392 bool has_pending_data()
const;
431 uint64_t m_current_cycle { 0 };
432 uint64_t m_max_cycles { 0 };
433 bool m_continuous_execution {
false };
438 static Kakshya::DataVariant extract_buffer_data(
const std::shared_ptr<Buffers::AudioBuffer>& buffer,
bool should_process =
false);
439 static void write_to_buffer(
const std::shared_ptr<Buffers::AudioBuffer>& buffer,
const Kakshya::DataVariant& data);
440 static void write_to_container(
const std::shared_ptr<Kakshya::DynamicSoundStream>& container,
const Kakshya::DataVariant& data);
441 static Kakshya::DataVariant read_from_container(
const std::shared_ptr<Kakshya::DynamicSoundStream>& container, uint64_t start, uint32_t length);
444 void reset_accumulated_data();
448 std::shared_ptr<Vruta::SoundRoutine> dispatch_branch_async(BranchInfo& branch, uint64_t cycle);
451 void cleanup_expired_data();
452 void cleanup_completed_branches();
456 Vruta::SoundRoutine execute_streaming(uint64_t max_cycles, uint64_t samples_per_operation);
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.