2 #include <ossia/dataflow/audio_port.hpp>
3 #include <ossia/dataflow/graph_node.hpp>
4 #include <ossia/dataflow/midi_port.hpp>
5 #include <ossia/dataflow/port.hpp>
8 class forward_node :
public ossia::nonowning_graph_node
13 m_inlets.push_back(&audio_in);
15 m_outlets.push_back(&audio_out);
19 void run(
const token_request& t, exec_state_facade) noexcept
override
24 ossia::audio_port& i = *audio_in;
25 ossia::audio_port& o = *audio_out;
26 if(!audio_out.has_gain)
38 process_audio_out_mono(i, audio_out);
42 process_audio_out_general(i, audio_out);
54 ossia::audio_inlet audio_in;
56 ossia::audio_outlet audio_out;
60 class interval final :
public forward_node
63 using forward_node::forward_node;
67 if(m_inlets.size() == 4)
75 [[nodiscard]] std::string label() const noexcept
override {
return "Interval"; }
77 void run(
const token_request& t, exec_state_facade f) noexcept
override
79 forward_node::run(t, f);
80 if(m_inlets.size() >= 4)
83 ossia::value_port& vp = *m_inlets[1]->target<ossia::value_port>();
84 if(
auto& data = vp.get_data(); !data.empty())
86 tempo = ossia::convert<float>(data.back().value);
90 ossia::value_port& vp = *m_inlets[3]->target<ossia::value_port>();
91 if(
auto& data = vp.get_data(); !data.empty())
93 float seek_ms = ossia::convert<float>(data.back().value);
94 seek = ossia::flicks_per_millisecond<double> * seek_ms;
100 static const constexpr
float no_tempo = -1000.f;
101 float tempo{no_tempo};
104 class loop final :
public forward_node
107 using forward_node::forward_node;
108 [[nodiscard]] std::string label() const noexcept
override {
return "Loop"; }
110 class scenario final :
public forward_node
113 using forward_node::forward_node;
114 [[nodiscard]] std::string label() const noexcept
override {
return "Scenario"; }
constexpr OSSIA_INLINE auto min(const T a, const U b) noexcept -> typename std::conditional<(sizeof(T) > sizeof(U)), T, U >::type
min function tailored for values
Definition: math.hpp:125