Applies stored logic data to the given buffer.
64{
66 return false;
67 }
68
69 auto& buffer_data = std::dynamic_pointer_cast<AudioBuffer>(buffer)->get_data();
70 size_t min_size = std::min(
m_logic_data.size(), buffer_data.size());
71
72 if (!modulation_func) {
75 modulation_func = [](double logic_val, double ) {
76 return logic_val;
77 };
78 break;
79
81 modulation_func = [](double logic_val, double buffer_val) {
82 return logic_val * buffer_val;
83 };
84 break;
85
87 modulation_func = [](double logic_val, double buffer_val) {
88 return logic_val + buffer_val;
89 };
90 break;
91
93 modulation_func = [](double logic_val, double buffer_val) {
94 return logic_val > 0.5 ? -buffer_val : buffer_val;
95 };
96 break;
97
99 if (min_size > 0) {
101 }
102
103 modulation_func = [this](double logic_val, double buffer_val) mutable {
104 if (logic_val > 0.5) {
106 return buffer_val;
107 }
109 };
110 break;
111
113 modulation_func = [](double logic_val, double buffer_val) {
114 return logic_val > 0.5 ? buffer_val : 0.0;
115 };
116 break;
117
119 modulation_func = [](double logic_val, double buffer_val) {
120 return buffer_val * logic_val;
121 };
122 break;
123
125 modulation_func = [this](double logic_val, double ) {
127 };
128 break;
129
131 if (min_size > 0) {
134 }
135
136 modulation_func = [this, first_sample = true](double logic_val, double buffer_val) mutable {
137 if (first_sample) {
138 first_sample = false;
139 return buffer_val;
140 }
141
144
145 if (logic_changed) {
147 }
149 };
150 break;
151
154 break;
155
156 default:
157 modulation_func = [](double logic_val, double ) {
158 return logic_val;
159 };
160 }
161 }
162
163 for (size_t i = 0; i < min_size; ++i) {
164 buffer_data[i] = modulation_func(
m_logic_data[i], buffer_data[i]);
165 }
166
167 return true;
168}
ModulationFunction m_modulation_function
Custom transformation function.
@ MULTIPLY
Gate/mask buffer: out = logic * buffer (standard audio gate)
@ SAMPLE_AND_HOLD
Sample on logic change: out = logic_changed ? buffer : held_value.
@ REPLACE
Replace buffer with logic values: out = logic.
@ CUSTOM
User-defined modulation function.
@ ZERO_ON_FALSE
Silence when logic is false: out = logic ? buffer : 0.0.
@ INVERT_ON_TRUE
Invert signal when logic is true: out = logic ? -buffer : buffer.
@ ADD
Offset buffer: out = logic + buffer.
@ CROSSFADE
Smooth interpolation: out = lerp(0.0, buffer, logic)
@ HOLD_ON_FALSE
Hold last value when logic is false: out = logic ? buffer : last_value.
@ THRESHOLD_REMAP
Binary value selection: out = logic ? high_val : low_val.
std::vector< double > m_logic_data
Stored logic processing results.
bool m_has_generated_data
Whether logic data has been generated.
double m_last_held_value
Last held value for HOLD_ON_FALSE and SAMPLE_AND_HOLD.
double m_high_value
High value for THRESHOLD_REMAP.
double m_low_value
Low value for THRESHOLD_REMAP.
double m_last_logic_value
Previous logic value for change detection.
ModulationType m_modulation_type
How logic values modulate buffer content.