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

◆ apply()

bool MayaFlux::Buffers::LogicProcessor::apply ( const std::shared_ptr< Buffer > &  buffer,
ModulationFunction  modulation_func = nullptr 
)

Applies stored logic data to the given buffer.

Parameters
bufferBuffer to apply logic data to
modulation_funcOptional function defining how to apply logic to audio
Returns
Whether application was successful

Use cases:

  • Conditional data transformation
  • Digital gating of signals
  • Binary masking operations
  • Custom digital signal processing chains

Definition at line 236 of file LogicProcessor.cpp.

237{
238 if (!buffer || !m_has_generated_data) {
239 return false;
240 }
241
242 auto& buffer_data = std::dynamic_pointer_cast<AudioBuffer>(buffer)->get_data();
243 size_t min_size = std::min(m_logic_data.size(), buffer_data.size());
244
245 if (!modulation_func) {
246 switch (m_modulation_type) {
248 modulation_func = [](double logic_val, double /*buffer_val*/) {
249 return logic_val;
250 };
251 break;
252
254 modulation_func = [](double logic_val, double buffer_val) {
255 return logic_val * buffer_val;
256 };
257 break;
258
260 modulation_func = [](double logic_val, double buffer_val) {
261 return logic_val + buffer_val;
262 };
263 break;
264
266 modulation_func = [](double logic_val, double buffer_val) {
267 return logic_val > 0.5 ? -buffer_val : buffer_val;
268 };
269 break;
270
272 if (min_size > 0) {
273 m_last_held_value = buffer_data[0];
274 }
275
276 modulation_func = [this](double logic_val, double buffer_val) mutable {
277 if (logic_val > 0.5) {
278 m_last_held_value = buffer_val;
279 return buffer_val;
280 }
281 return m_last_held_value;
282 };
283 break;
284
286 modulation_func = [](double logic_val, double buffer_val) {
287 return logic_val > 0.5 ? buffer_val : 0.0;
288 };
289 break;
290
292 modulation_func = [](double logic_val, double buffer_val) {
293 return buffer_val * logic_val;
294 };
295 break;
296
298 modulation_func = [this](double logic_val, double /*buffer_val*/) {
299 return logic_val > 0.5 ? m_high_value : m_low_value;
300 };
301 break;
302
304 if (min_size > 0) {
305 m_last_held_value = buffer_data[0];
307 }
308
309 modulation_func = [this, first_sample = true](double logic_val, double buffer_val) mutable {
310 if (first_sample) {
311 first_sample = false;
312 return buffer_val;
313 }
314
315 bool logic_changed = std::abs(logic_val - m_last_logic_value) > 0.01;
316 m_last_logic_value = logic_val;
317
318 if (logic_changed) {
319 m_last_held_value = buffer_val;
320 }
321 return m_last_held_value;
322 };
323 break;
324
326 modulation_func = m_modulation_function;
327 break;
328
329 default:
330 modulation_func = [](double logic_val, double /*buffer_val*/) {
331 return logic_val;
332 };
333 }
334 }
335
336 for (size_t i = 0; i < min_size; ++i) {
337 buffer_data[i] = modulation_func(m_logic_data[i], buffer_data[i]);
338 }
339
340 return true;
341}
std::shared_ptr< NetworkGeometryBuffer > buffer
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.

References ADD, buffer, CROSSFADE, CUSTOM, HOLD_ON_FALSE, INVERT_ON_TRUE, m_has_generated_data, m_high_value, m_last_held_value, m_last_logic_value, m_logic_data, m_low_value, m_modulation_function, m_modulation_type, MULTIPLY, REPLACE, SAMPLE_AND_HOLD, THRESHOLD_REMAP, and ZERO_ON_FALSE.

Referenced by processing_function().

+ Here is the caller graph for this function: