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

◆ generate()

bool MayaFlux::Buffers::LogicProcessor::generate ( size_t  num_samples,
const std::vector< double > &  input_data 
)

Generates discrete logic data from input without modifying any buffer.

Parameters
num_samplesNumber of samples to generate
input_dataInput data to process through logic node
Returns
Whether generation was successful

This method allows for offline processing of data through the logic system, useful for analysis, preprocessing, or generating control signals independently of the main signal path.

Definition at line 23 of file LogicProcessor.cpp.

24{
25 if (!m_logic || input_data.empty()) {
26 return false;
27 }
28
29 if (m_pending_logic) {
31 m_pending_logic.reset();
32 m_use_internal = true;
33 }
34
35 m_logic_data.resize(num_samples, 0);
36
38 m_logic->reset();
39 for (const auto& node : m_plane_nodes) {
40 node->reset();
41 }
42 }
43
44 const bool guarded = m_logic->m_state.load() != Nodes::NodeState::INACTIVE;
45 if (guarded) {
46 m_logic->save_state();
47 }
48
49 const bool parallel = m_logic->get_mode() == Nodes::Generator::LogicMode::MULTI_INPUT;
50
51 if (m_generations > 0 && parallel) {
52 generate_spatial(num_samples, input_data);
53 } else if (m_plane_bits > 0) {
54 generate_planes(num_samples, input_data);
55 } else if (!m_keys.empty() && parallel) {
56 generate_keyed(num_samples, input_data);
57 } else {
58 generate_temporal(num_samples, input_data);
59 }
60
61 if (guarded) {
62 m_logic->restore_state();
63 }
64
66 return true;
67}
std::vector< std::shared_ptr< Nodes::Generator::Logic > > m_plane_nodes
One clone of the node per bit plane.
size_t m_generations
Automaton steps per block, 0 when off.
std::vector< double > m_logic_data
Stored logic processing results.
bool m_has_generated_data
Whether logic data has been generated.
void generate_temporal(size_t num_samples, const std::vector< double > &input_data)
uint32_t m_plane_bits
Word width when processing bit planes, 0 when off.
std::shared_ptr< Nodes::Generator::Logic > m_logic
Logic node for processing.
void generate_planes(size_t num_samples, const std::vector< double > &input_data)
void generate_keyed(size_t num_samples, const std::vector< double > &input_data)
std::vector< std::weak_ptr< AudioBuffer > > m_keys
Buffers read as extra input slots.
std::shared_ptr< Nodes::Generator::Logic > m_pending_logic
Pending logic node update.
bool m_use_internal
Whether to use internal logic node.
bool m_reset_between_buffers
Whether to reset logic between buffers.
void generate_spatial(size_t num_samples, const std::vector< double > &input_data)
@ MULTI_INPUT
Parallel evaluation of multiple input signals.
@ INACTIVE
Engine is not processing this node.
Definition NodeSpec.hpp:44

References generate_keyed(), generate_planes(), generate_spatial(), generate_temporal(), MayaFlux::Nodes::INACTIVE, m_generations, m_has_generated_data, m_keys, m_logic, m_logic_data, m_pending_logic, m_plane_bits, m_plane_nodes, m_reset_between_buffers, m_use_internal, and MayaFlux::Nodes::Generator::MULTI_INPUT.

Referenced by processing_function().

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