MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ notify_tick()

void MayaFlux::Nodes::Input::InputNode::notify_tick ( double  value)
overrideprotectedvirtual

Notify callbacks (minimal for InputNode)

InputNodes fire callbacks sparingly - the input event IS the notification. Override if you need per-sample callbacks (rare for input).

Implements MayaFlux::Nodes::Node.

Reimplemented in MayaFlux::Nodes::Input::MIDINode, and MayaFlux::Nodes::Input::OSCNode.

Definition at line 208 of file InputNode.cpp.

209{
210 update_context(value);
211 // NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
212 auto& ctx = static_cast<InputContext&>(get_last_context());
213
214 for (auto& callback : m_callbacks) {
215 callback(ctx);
216 }
217 for (auto& [callback, condition] : m_conditional_callbacks) {
218 if (condition(ctx)) {
219 callback(ctx);
220 }
221 }
222
223 for (auto& cb : m_input_callbacks) {
224 bool should_fire = false;
225
226 switch (cb.event_type) {
228 should_fire = true;
229 break;
230
232 double epsilon = cb.threshold.value_or(0.0001);
233 should_fire = std::abs(value - m_previous_value) > epsilon;
234 break;
235 }
236
238 should_fire = (m_previous_value < cb.threshold.value() && value >= cb.threshold.value());
239 break;
240
242 should_fire = (m_previous_value >= cb.threshold.value() && value < cb.threshold.value());
243 break;
244
246 auto [min, max] = cb.range.value();
247 bool in_range_now = (value >= min && value <= max);
248 should_fire = (!m_was_in_range && in_range_now);
249 m_was_in_range = in_range_now;
250 break;
251 }
252
254 auto [min, max] = cb.range.value();
255 bool in_range_now = (value >= min && value <= max);
256 should_fire = (m_was_in_range && !in_range_now);
257 m_was_in_range = in_range_now;
258 break;
259 }
260
262 should_fire = (m_previous_value < 0.5 && value >= 0.5);
263 break;
264
266 should_fire = (m_previous_value >= 0.5 && value < 0.5);
267 break;
268
270 should_fire = cb.condition && cb.condition.value()(ctx);
271 break;
272 }
273
274 if (should_fire) {
275 cb.callback(ctx);
276 }
277 }
278
279 m_previous_value = value;
280}
void update_context(double value) override
Update context after processing.
NodeContext & get_last_context() override
Retrieves the last created context object.
std::vector< InputCallback > m_input_callbacks
std::vector< NodeHook > m_callbacks
Collection of standard callback functions.
Definition Node.hpp:434
std::vector< std::pair< NodeHook, NodeCondition > > m_conditional_callbacks
Collection of conditional callback functions with their predicates.
Definition Node.hpp:444
std::vector< double > max(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Maximum value per window.
Definition Analysis.cpp:436
std::vector< double > min(std::span< const double > data, size_t n_windows, uint32_t hop_size, uint32_t window_size)
Minimum value per window.
Definition Analysis.cpp:420
@ BUTTON_PRESS
Button went from 0.0 to 1.0.
@ THRESHOLD_FALLING
Value crossed threshold downward.
@ VALUE_CHANGE
Value changed from previous.
@ THRESHOLD_RISING
Value crossed threshold upward.
@ CONDITIONAL
User-provided condition.
@ RANGE_ENTER
Value entered specified range.
@ RANGE_EXIT
Value exited specified range.
@ BUTTON_RELEASE
Button went from 1.0 to 0.0.

References MayaFlux::Nodes::Input::BUTTON_PRESS, MayaFlux::Nodes::Input::BUTTON_RELEASE, MayaFlux::Nodes::Input::CONDITIONAL, get_last_context(), MayaFlux::Nodes::Node::m_callbacks, MayaFlux::Nodes::Node::m_conditional_callbacks, m_input_callbacks, m_previous_value, m_was_in_range, MayaFlux::Nodes::Input::RANGE_ENTER, MayaFlux::Nodes::Input::RANGE_EXIT, MayaFlux::Nodes::Input::THRESHOLD_FALLING, MayaFlux::Nodes::Input::THRESHOLD_RISING, MayaFlux::Nodes::Input::TICK, update_context(), and MayaFlux::Nodes::Input::VALUE_CHANGE.

Referenced by MayaFlux::Nodes::Input::MIDINode::notify_tick(), MayaFlux::Nodes::Input::OSCNode::notify_tick(), process_input(), and process_sample().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: