gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

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 }