audioBuffers.cpp (1581B)
1 #include "audioBuffers.h" 2 3 namespace bridgeLib 4 { 5 AudioBuffers::AudioBuffers() = default; 6 7 void AudioBuffers::writeInput(const synthLib::TAudioInputs& _inputs, const uint32_t _size) 8 { 9 m_inputSize += _size; 10 11 for(size_t c=0; c<_inputs.size(); ++c) 12 { 13 auto& in = _inputs[c]; 14 15 if(!in) 16 continue; 17 18 for(uint32_t i=0; i<_size; ++i) 19 m_inputBuffers[c].push_back(in[i]); 20 } 21 } 22 23 void AudioBuffers::readInput(const uint32_t _channel, std::vector<float>& _data, const uint32_t _numSamples) 24 { 25 for(uint32_t i=0; i<_numSamples; ++i) 26 _data[i] = m_inputBuffers[_channel].pop_front(); 27 } 28 29 void AudioBuffers::readOutput(const synthLib::TAudioOutputs& _outputs, const uint32_t _size) 30 { 31 assert(m_outputSize >= _size); 32 m_outputSize -= _size; 33 34 for(size_t c=0; c<_outputs.size(); ++c) 35 { 36 auto* out = _outputs[c]; 37 38 if(!out) 39 continue; 40 41 for(uint32_t i=0; i<_size; ++i) 42 out[i] = m_outputBuffers[c].pop_front(); 43 } 44 } 45 46 void AudioBuffers::writeOutput(const uint32_t _channel, const std::vector<float>& _data, const uint32_t _numSamples) 47 { 48 for(uint32_t i=0; i<_numSamples; ++i) 49 m_outputBuffers[_channel].push_back(_data[i]); 50 } 51 52 void AudioBuffers::setLatency(const uint32_t _newLatency, const uint32_t _numSamplesToKeep) 53 { 54 while(_newLatency > m_latency) 55 { 56 for (auto& in : m_inputBuffers) 57 in.push_back(0.0f); 58 ++m_latency; 59 ++m_inputSize; 60 } 61 62 while(_newLatency < m_latency && m_inputBuffers.front().size() > _numSamplesToKeep) 63 { 64 for (auto& in : m_inputBuffers) 65 in.pop_front(); 66 --m_latency; 67 --m_inputSize; 68 } 69 } 70 }