MCPcopy Create free account
hub / github.com/DISTRHO/Cardinal / applyModelOffline

Function applyModelOffline

plugins/Cardinal/src/AIDA-X.cpp:58–146  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

56// This function carries model calculations
57
58static inline
59void applyModelOffline(DynamicModel* model, float* const out, uint32_t numSamples)
60{
61 const bool input_skip = model->input_skip;
62 const float input_gain = model->input_gain;
63 const float output_gain = model->output_gain;
64
65 std::visit(
66 [&out, numSamples, input_skip, input_gain, output_gain] (auto&& custom_model)
67 {
68 using ModelType = std::decay_t<decltype (custom_model)>;
69
70 if (d_isNotEqual(input_gain, 1.f))
71 {
72 for (uint32_t i=0; i<numSamples; ++i)
73 out[i] *= input_gain;
74 }
75
76 if constexpr (ModelType::input_size == 1)
77 {
78 if (input_skip)
79 {
80 for (uint32_t i=0; i<numSamples; ++i)
81 out[i] += custom_model.forward(out + i);
82 }
83 else
84 {
85 for (uint32_t i=0; i<numSamples; ++i)
86 out[i] = custom_model.forward(out + i) * output_gain;
87 }
88 }
89 else if constexpr (ModelType::input_size == 2)
90 {
91 float inArray1 alignas(RTNEURAL_DEFAULT_ALIGNMENT)[2];
92
93 if (input_skip)
94 {
95 for (uint32_t i=0; i<numSamples; ++i)
96 {
97 inArray1[0] = out[i];
98 inArray1[1] = 0.f;
99 out[i] += custom_model.forward(inArray1);
100 }
101 }
102 else
103 {
104 for (uint32_t i=0; i<numSamples; ++i)
105 {
106 inArray1[0] = out[i];
107 inArray1[1] = 0.f;
108 out[i] = custom_model.forward(inArray1) * output_gain;
109 }
110 }
111 }
112 else if constexpr (ModelType::input_size == 3)
113 {
114 float inArray2 alignas(RTNEURAL_DEFAULT_ALIGNMENT)[3];
115

Callers 1

loadModelFromStreamMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected