46 void on_attach(
const std::shared_ptr<SignalSourceContainer>& container)
override;
47 void on_detach(
const std::shared_ptr<SignalSourceContainer>& container)
override;
59 void process(
const std::shared_ptr<SignalSourceContainer>& container)
override;
61 [[nodiscard]]
bool is_processing()
const override {
return m_is_processing.load(); }
78 void set_frames_per_block(uint64_t frames_per_block);
97 void set_loop_region(uint64_t start_frame, uint64_t end_frame);
107 void set_loop_count(
size_t n);
113 void set_on_end(std::function<
void()> cb) { m_on_end = std::move(cb); }
126 void set_speed(
double speed);
128 [[nodiscard]]
bool is_active()
const {
return m_active; }
129 [[nodiscard]] uint64_t
cursor()
const {
return m_cursor[0]; }
130 [[nodiscard]] uint64_t
loop_start()
const {
return m_loop_start; }
131 [[nodiscard]] uint64_t
loop_end()
const {
return m_loop_end; }
136 std::vector<uint64_t> m_cursor {};
137 uint64_t m_loop_start {};
138 uint64_t m_loop_end {};
141 size_t m_loop_count {};
142 size_t m_loops_remaining {};
143 double m_speed_remainder {};
144 double m_speed { 1.0 };
146 uint32_t m_slot_index { std::numeric_limits<uint32_t>::max() };
148 std::atomic<bool> m_is_processing {
false };