MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
Chronie.cpp
Go to the documentation of this file.
1#include "Chronie.hpp"
2
3#include "Core.hpp"
4
11
13
15
16namespace MayaFlux {
17
18std::shared_ptr<Vruta::TaskScheduler> get_scheduler()
19{
20 return get_context().get_scheduler();
21}
22
23std::shared_ptr<Vruta::EventManager> get_event_manager()
24{
26}
27
28template <typename... Args>
29bool update_task_params(const std::string& name, Args... args)
30{
31 return get_scheduler()->update_task_params(name, args...);
32}
33
34Vruta::SoundRoutine create_metro(double interval_seconds, std::function<void()> callback)
35{
36 return Kriya::metro(*get_scheduler(), interval_seconds, std::move(callback));
37}
38
39void schedule_metro(double interval_seconds, std::function<void()> callback, std::string name)
40{
41 auto scheduler = get_scheduler();
42 if (name.empty()) {
43 name = "metro_" + std::to_string(scheduler->get_next_task_id());
44 }
45 auto metronome = std::make_shared<Vruta::SoundRoutine>(create_metro(interval_seconds, std::move(callback)));
46
47 get_scheduler()->add_task(std::move(metronome), name, false);
48}
49
50Vruta::SoundRoutine create_sequence(std::vector<std::pair<double, std::function<void()>>> seq)
51{
52 return Kriya::sequence(*get_scheduler(), std::move(seq));
53}
54
55void schedule_sequence(std::vector<std::pair<double, std::function<void()>>> seq, std::string name)
56{
57 auto scheduler = get_scheduler();
58 if (name.empty()) {
59 name = "seq_" + std::to_string(scheduler->get_next_task_id());
60 }
61 auto tseq = std::make_shared<Vruta::SoundRoutine>(create_sequence(std::move(seq)));
62 get_scheduler()->add_task(std::move(tseq), name, false);
63}
64
65Vruta::SoundRoutine create_line(float start_value, float end_value, float duration_seconds, uint32_t step_duration, bool loop)
66{
67 return Kriya::line(*get_scheduler(), start_value, end_value, duration_seconds, step_duration, loop);
68}
69
70Vruta::SoundRoutine create_pattern(std::function<std::any(uint64_t)> pattern_func, std::function<void(std::any)> callback, double interval_seconds)
71{
72 return Kriya::pattern(*get_scheduler(), std::move(pattern_func), std::move(callback), interval_seconds);
73}
74
75void schedule_pattern(std::function<std::any(uint64_t)> pattern_func, std::function<void(std::any)> callback, double interval_seconds, std::string name)
76{
77 auto scheduler = get_scheduler();
78 if (name.empty()) {
79 name = "pattern_" + std::to_string(scheduler->get_next_task_id());
80 }
81 auto pattern = std::make_shared<Vruta::SoundRoutine>(create_pattern(std::move(pattern_func), std::move(callback), interval_seconds));
82 get_scheduler()->add_task(std::move(pattern), name, false);
83}
84
85float* get_line_value(const std::string& name)
86{
87 if (auto task = get_scheduler()->get_task(name)) {
88 auto cur_val = task->get_state<float>("current_value");
89 if (cur_val) {
90 return cur_val;
91 }
92
93 MF_ERROR(Journal::Component::API, Journal::Context::CoroutineScheduling, "line value not returned from task. Verify that tasks has not returned");
94 return nullptr;
95 }
96 MF_ERROR(Journal::Component::API, Journal::Context::CoroutineScheduling, "Task: {} not found. Verify task validity or if its been scheduled", name);
97 return nullptr;
98}
99
100void schedule_task(const std::string& name, Vruta::SoundRoutine&& task, bool initialize)
101{
102 auto task_ptr = std::make_shared<Vruta::SoundRoutine>(std::move(task));
103 get_scheduler()->add_task(std::move(task_ptr), name, initialize);
104}
105
106bool cancel_task(const std::string& name)
107{
108 return get_scheduler()->cancel_task(name);
109}
110
111bool restart_task(const std::string& name)
112{
113 return get_scheduler()->restart_task(name);
114}
115
116std::shared_ptr<Kriya::BufferPipeline> create_buffer_pipeline()
117{
119}
120
122 const std::shared_ptr<Core::Window>& window,
123 IO::Keys key,
124 std::function<void()> callback,
125 std::string name)
126{
127 auto event_manager = get_event_manager();
128 if (name.empty()) {
129 name = "key_press_" + std::to_string(event_manager->get_next_event_id());
130 }
131
132 auto event = std::make_shared<Vruta::Event>(
133 Kriya::key_pressed(window, key, std::move(callback)));
134
135 event_manager->add_event(event, name);
136}
137
139 const std::shared_ptr<Core::Window>& window,
140 IO::Keys key,
141 std::function<void()> callback,
142 std::string name)
143{
144 auto event_manager = get_event_manager();
145 if (name.empty()) {
146 name = "key_release_" + std::to_string(event_manager->get_next_event_id());
147 }
148
149 auto event = std::make_shared<Vruta::Event>(
150 Kriya::key_released(window, key, std::move(callback)));
151
152 event_manager->add_event(event, name);
153}
154
156 const std::shared_ptr<Core::Window>& window,
157 std::function<void(IO::Keys)> callback,
158 std::string name)
159{
160 auto event_manager = get_event_manager();
161 if (name.empty()) {
162 name = "any_key_" + std::to_string(event_manager->get_next_event_id());
163 }
164
165 auto event = std::make_shared<Vruta::Event>(
166 Kriya::any_key(window, std::move(callback)));
167
168 event_manager->add_event(event, name);
169}
170
172 const std::shared_ptr<Core::Window>& window,
173 IO::MouseButtons button,
174 std::function<void(double, double)> callback,
175 std::string name)
176{
177 auto event_manager = get_event_manager();
178 if (name.empty()) {
179 name = "mouse_press_" + std::to_string(event_manager->get_next_event_id());
180 }
181
182 auto event = std::make_shared<Vruta::Event>(
183 Kriya::mouse_pressed(window, button, std::move(callback)));
184
185 event_manager->add_event(event, name);
186}
187
189 const std::shared_ptr<Core::Window>& window,
190 IO::MouseButtons button,
191 std::function<void(double, double)> callback,
192 std::string name)
193{
194 auto event_manager = get_event_manager();
195 if (name.empty()) {
196 name = "mouse_release_" + std::to_string(event_manager->get_next_event_id());
197 }
198
199 auto event = std::make_shared<Vruta::Event>(
200 Kriya::mouse_released(window, button, std::move(callback)));
201
202 event_manager->add_event(event, name);
203}
204
206 const std::shared_ptr<Core::Window>& window,
207 std::function<void(double, double)> callback,
208 std::string name)
209{
210 auto event_manager = get_event_manager();
211 if (name.empty()) {
212 name = "mouse_move_" + std::to_string(event_manager->get_next_event_id());
213 }
214
215 auto event = std::make_shared<Vruta::Event>(
216 Kriya::mouse_moved(window, std::move(callback)));
217
218 event_manager->add_event(event, name);
219}
220
222 const std::shared_ptr<Core::Window>& window,
223 std::function<void(double, double)> callback,
224 std::string name)
225{
226 auto event_manager = get_event_manager();
227 if (name.empty()) {
228 name = "scroll_" + std::to_string(event_manager->get_next_event_id());
229 }
230
231 auto event = std::make_shared<Vruta::Event>(
232 Kriya::mouse_scrolled(window, std::move(callback)));
233
234 event_manager->add_event(event, name);
235}
236
237bool cancel_event_handler(const std::string& name)
238{
239 return get_event_manager()->cancel_event(name);
240}
241
242}
#define MF_ERROR(comp, ctx,...)
Core engine lifecycle and configuration API.
std::shared_ptr< Vruta::EventManager > get_event_manager()
Gets the event manager.
Definition Engine.hpp:268
std::shared_ptr< Vruta::TaskScheduler > get_scheduler()
Gets the task scheduler.
Definition Engine.hpp:241
static std::shared_ptr< BufferPipeline > create(Vruta::TaskScheduler &scheduler, std::shared_ptr< Buffers::BufferManager > buffer_manager=nullptr)
A C++20 coroutine-based audio processing task with sample-accurate timing.
Definition Routine.hpp:316
void initialize()
Definition main.cpp:11
MouseButtons
Enumeration for mouse buttons.
Definition Keys.hpp:147
@ CoroutineScheduling
Coroutine scheduling and temporal coordination (Vruta::TaskScheduler)
@ API
MayaFlux/API Wrapper and convenience functions.
Vruta::Event key_released(std::shared_ptr< Core::Window > window, IO::Keys key, std::function< void()> callback)
Creates an Event coroutine that triggers on specific key release.
Vruta::Event any_key(std::shared_ptr< Core::Window > window, std::function< void(IO::Keys)> callback)
Creates an Event coroutine that triggers on any key press.
Vruta::Event key_pressed(std::shared_ptr< Core::Window > window, IO::Keys key, std::function< void()> callback)
Creates an Event coroutine that triggers on specific key press.
Vruta::Event mouse_moved(std::shared_ptr< Core::Window > window, std::function< void(double, double)> callback)
Creates an Event coroutine that triggers on mouse movement.
Vruta::SoundRoutine sequence(Vruta::TaskScheduler &scheduler, std::vector< std::pair< double, std::function< void()> > > sequence)
Creates a temporal sequence that executes callbacks at specified time offsets.
Definition Tasks.cpp:22
Vruta::Event mouse_scrolled(std::shared_ptr< Core::Window > window, std::function< void(double, double)> callback)
Creates an Event coroutine that triggers on mouse scroll.
Vruta::Event mouse_released(std::shared_ptr< Core::Window > window, IO::MouseButtons button, std::function< void(double, double)> callback)
Creates an Event coroutine that triggers on specific mouse button release.
Vruta::SoundRoutine pattern(Vruta::TaskScheduler &scheduler, std::function< std::any(uint64_t)> pattern_func, std::function< void(std::any)> callback, double interval_seconds)
Creates a generative algorithm that produces values based on a pattern function.
Definition Tasks.cpp:91
Vruta::Event mouse_pressed(std::shared_ptr< Core::Window > window, IO::MouseButtons button, std::function< void(double, double)> callback)
Creates an Event coroutine that triggers on specific mouse button press.
Vruta::SoundRoutine line(Vruta::TaskScheduler &scheduler, float start_value, float end_value, float duration_seconds, uint32_t step_duration, bool restartable)
Creates a continuous interpolation generator between two values over time.
Definition Tasks.cpp:31
Vruta::SoundRoutine metro(Vruta::TaskScheduler &scheduler, double interval_seconds, std::function< void()> callback)
Creates a periodic event generator that executes a callback at regular intervals.
Definition Tasks.cpp:8
bool cancel_event_handler(const std::string &name)
Cancel an event handler by name.
Definition Chronie.cpp:237
void on_mouse_move(const std::shared_ptr< Core::Window > &window, std::function< void(double, double)> callback, std::string name)
Schedule a mouse movement handler.
Definition Chronie.cpp:205
bool update_task_params(const std::string &name, Args... args)
Updates parameters of a scheduled task.
Definition Chronie.cpp:29
void on_scroll(const std::shared_ptr< Core::Window > &window, std::function< void(double, double)> callback, std::string name)
Schedule a mouse scroll handler.
Definition Chronie.cpp:221
void schedule_metro(double interval_seconds, std::function< void()> callback, std::string name)
Creates a metronome task and addes it to the default scheduler list for evaluation.
Definition Chronie.cpp:39
std::shared_ptr< Vruta::EventManager > get_event_manager()
Gets the event manager from the default engine.
Definition Chronie.cpp:23
bool restart_task(const std::string &name)
Restarts a scheduled task.
Definition Chronie.cpp:111
Vruta::SoundRoutine create_pattern(std::function< std::any(uint64_t)> pattern_func, std::function< void(std::any)> callback, double interval_seconds)
Schedules a pattern generator that produces values based on a pattern function.
Definition Chronie.cpp:70
void schedule_sequence(std::vector< std::pair< double, std::function< void()> > > seq, std::string name)
Creates a sequence task that calls functions at specified times and addes it to the default scheduler...
Definition Chronie.cpp:55
void on_mouse_pressed(const std::shared_ptr< Core::Window > &window, IO::MouseButtons button, std::function< void(double, double)> callback, std::string name)
Schedule a mouse button press handler.
Definition Chronie.cpp:171
Vruta::SoundRoutine create_line(float start_value, float end_value, float duration_seconds, uint32_t step_duration, bool loop)
Creates a line generator that interpolates between values over time.
Definition Chronie.cpp:65
void schedule_task(const std::string &name, Vruta::SoundRoutine &&task, bool initialize)
Schedules a new sound routine task.
Definition Chronie.cpp:100
void schedule_pattern(std::function< std::any(uint64_t)> pattern_func, std::function< void(std::any)> callback, double interval_seconds, std::string name)
Schedules a pattern generator that produces values based on a pattern function and addes it to the de...
Definition Chronie.cpp:75
float * get_line_value(const std::string &name)
Gets a pointer to a task's current value.
Definition Chronie.cpp:85
Vruta::SoundRoutine create_metro(double interval_seconds, std::function< void()> callback)
Creates a simple task that calls a function at a specified interval.
Definition Chronie.cpp:34
void on_key_released(const std::shared_ptr< Core::Window > &window, IO::Keys key, std::function< void()> callback, std::string name)
Schedule a key release handler.
Definition Chronie.cpp:138
std::shared_ptr< Kriya::BufferPipeline > create_buffer_pipeline()
Creates a new buffer pipeline instance.
Definition Chronie.cpp:116
std::shared_ptr< Buffers::BufferManager > get_buffer_manager()
Gets the buffer manager from the default engine.
Definition Graph.cpp:111
bool cancel_task(const std::string &name)
Cancels a scheduled task.
Definition Chronie.cpp:106
Core::Engine & get_context()
Gets the default engine instance.
Definition Core.cpp:58
void on_mouse_released(const std::shared_ptr< Core::Window > &window, IO::MouseButtons button, std::function< void(double, double)> callback, std::string name)
Schedule a mouse button release handler.
Definition Chronie.cpp:188
Vruta::SoundRoutine create_sequence(std::vector< std::pair< double, std::function< void()> > > seq)
Creates a sequence task that calls functions at specified times.
Definition Chronie.cpp:50
std::shared_ptr< Vruta::TaskScheduler > get_scheduler()
Gets the task scheduler from the default engine.
Definition Chronie.cpp:18
void on_any_key(const std::shared_ptr< Core::Window > &window, std::function< void(IO::Keys)> callback, std::string name)
Schedule a handler for any key press.
Definition Chronie.cpp:155
void on_key_pressed(const std::shared_ptr< Core::Window > &window, IO::Keys key, std::function< void()> callback, std::string name)
Schedule a key press handler.
Definition Chronie.cpp:121
Main namespace for the Maya Flux audio engine.
Definition LiveAid.hpp:6