MayaFlux 0.4.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);
22 }
23}
24
26{
27 return static_cast<uint32_t>(m_audio_input_buffers.size());
28}
29
30std::shared_ptr<InputAudioBuffer> BufferInputControl::get_input_buffer(uint32_t channel) const
31{
32 return m_audio_input_buffers[channel];
33}
34
35// ============================================================================
36// Input Data Processing
37// ============================================================================
38
39void BufferInputControl::process_audio_input(double* input_data, uint32_t num_channels, uint32_t num_frames)
40{
41 if (m_audio_input_buffers.empty() || m_audio_input_buffers.size() < num_channels) {
42 setup_audio_input_buffers(num_channels, num_frames);
43 }
44
45 if (!input_data) {
47 "BufferInputControl: Invalid input data pointer");
48 return;
49 }
50
51 for (uint32_t i = 0; i < m_audio_input_buffers.size(); ++i) {
52 auto& data = m_audio_input_buffers[i]->get_data();
53
54 for (uint32_t frame = 0; frame < data.size(); ++frame) {
55 data[frame] = static_cast<double*>(input_data)[frame * num_channels + i];
56 }
57 m_audio_input_buffers[i]->process_default();
58 }
59}
60
61// ============================================================================
62// Listener Management
63// ============================================================================
64
66 const std::shared_ptr<AudioBuffer>& buffer,
67 uint32_t channel)
68{
69 if (channel >= m_audio_input_buffers.size()) {
71 "BufferInputControl: Input channel {} out of range", channel);
72 return;
73 }
74
75 auto input_buffer = m_audio_input_buffers[channel];
76 if (input_buffer) {
77 input_buffer->register_listener(buffer);
78 }
79}
80
82 const std::shared_ptr<AudioBuffer>& buffer,
83 uint32_t channel)
84{
85 if (channel >= m_audio_input_buffers.size()) {
86 return;
87 }
88
89 auto input_buffer = m_audio_input_buffers[channel];
90 if (input_buffer) {
91 input_buffer->unregister_listener(buffer);
92 }
93}
94
95} // namespace MayaFlux::Buffers
#define MF_ERROR(comp, ctx,...)
Core::GlobalInputConfig input
Definition Config.cpp:36
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::shared_ptr< InputAudioBuffer > get_input_buffer(uint32_t channel) const
Gets the buffer size for audio 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.