MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
BufferInputControl.cpp
Go to the documentation of this file.
2
6
7namespace MayaFlux::Buffers {
8
9// ============================================================================
10// Input Buffer Lifecycle
11// ============================================================================
12
13void BufferInputControl::setup_audio_input_buffers(uint32_t num_channels, uint32_t buffer_size)
14{
16
17 for (uint32_t i = 0; i < num_channels; ++i) {
18 auto input = std::make_shared<InputAudioBuffer>(i, buffer_size);
19 auto processor = std::make_shared<InputAccessProcessor>();
20 input->set_default_processor(processor);
21 m_audio_input_buffers.push_back(input);
22 }
23}
24
26{
27 return static_cast<uint32_t>(m_audio_input_buffers.size());
28}
29
30// ============================================================================
31// Input Data Processing
32// ============================================================================
33
34void BufferInputControl::process_audio_input(double* input_data, uint32_t num_channels, uint32_t num_frames)
35{
36 if (m_audio_input_buffers.empty() || m_audio_input_buffers.size() < num_channels) {
37 setup_audio_input_buffers(num_channels, num_frames);
38 }
39
40 if (!input_data) {
42 "BufferInputControl: Invalid input data pointer");
43 return;
44 }
45
46 for (uint32_t i = 0; i < m_audio_input_buffers.size(); ++i) {
47 auto& data = m_audio_input_buffers[i]->get_data();
48
49 for (uint32_t frame = 0; frame < data.size(); ++frame) {
50 data[frame] = static_cast<double*>(input_data)[frame * num_channels + i];
51 }
52 m_audio_input_buffers[i]->process_default();
53 }
54}
55
56// ============================================================================
57// Listener Management
58// ============================================================================
59
61 const std::shared_ptr<AudioBuffer>& buffer,
62 uint32_t channel)
63{
64 if (channel >= m_audio_input_buffers.size()) {
66 "BufferInputControl: Input channel {} out of range", channel);
67 return;
68 }
69
70 auto input_buffer = m_audio_input_buffers[channel];
71 if (input_buffer) {
72 input_buffer->register_listener(buffer);
73 }
74}
75
77 const std::shared_ptr<AudioBuffer>& buffer,
78 uint32_t channel)
79{
80 if (channel >= m_audio_input_buffers.size()) {
81 return;
82 }
83
84 auto input_buffer = m_audio_input_buffers[channel];
85 if (input_buffer) {
86 input_buffer->unregister_listener(buffer);
87 }
88}
89
90} // namespace MayaFlux::Buffers
#define MF_ERROR(comp, ctx,...)
void register_audio_input_listener(const std::shared_ptr< AudioBuffer > &buffer, uint32_t channel)
Registers a buffer as a listener to an input channel.
void setup_audio_input_buffers(uint32_t num_channels, uint32_t buffer_size)
Sets up audio input buffers.
void process_audio_input(double *input_data, uint32_t num_channels, uint32_t num_frames)
Processes incoming audio input data into input buffers.
std::vector< std::shared_ptr< InputAudioBuffer > > m_audio_input_buffers
Input buffers for capturing audio input data.
uint32_t get_audio_input_channel_count() const
Gets the number of audio input channels.
void unregister_audio_input_listener(const std::shared_ptr< AudioBuffer > &buffer, uint32_t channel)
Unregisters a buffer from an input channel.
@ BufferManagement
Buffer Management (Buffers::BufferManager, creating buffers)
@ Core
Core engine, backend, subsystems.