audiobuffer.cpp (2259B)
1 #include "audiobuffer.h" 2 3 #include <cassert> 4 #include <cstring> // memcpy 5 6 namespace synthLib 7 { 8 void AudioBuffer::insertZeroes(size_t _size) 9 { 10 TChannel zeroes; 11 zeroes.resize(_size, 0.0f); 12 13 for(size_t c=0; c<m_data.size(); ++c) 14 { 15 m_data[c].insert(m_data[c].begin(), zeroes.begin(), zeroes.end()); 16 } 17 } 18 19 AudioBuffer::AudioBuffer(size_t _channelCount, const size_t _capacity) 20 { 21 m_data.resize(_channelCount); 22 reserve(_capacity); 23 } 24 25 void AudioBuffer::reserve(size_t _capacity) 26 { 27 for(auto i=0; i<m_data.size(); ++i) 28 { 29 if(m_data[i].capacity() < _capacity) 30 m_data[i].reserve(_capacity); 31 } 32 } 33 34 void AudioBuffer::resize(size_t _capacity) 35 { 36 for(auto i=0; i<m_data.size(); ++i) 37 { 38 m_data[i].resize(_capacity); 39 } 40 } 41 42 void AudioBuffer::append(const TBuffer& _data) 43 { 44 assert(_data.size() == m_data.size()); 45 46 for(size_t c=0; c<_data.size(); ++c) 47 { 48 append(m_data[c], &_data[c].front(), _data[c].size()); 49 } 50 } 51 52 void AudioBuffer::append(const float** _data, size_t _size) 53 { 54 for(size_t c=0; c<m_data.size(); ++c) 55 { 56 append(m_data[c], _data[c], _size); 57 } 58 } 59 60 void AudioBuffer::append(const TAudioInputs& _data, size_t _size) 61 { 62 const auto c = std::min(m_data.size(), _data.size()); 63 64 for(size_t i=0; i<c; ++i) 65 append(m_data[i], _data[i], _size); 66 } 67 68 void AudioBuffer::remove(const size_t _count) 69 { 70 for(size_t c=0; c<m_data.size(); ++c) 71 { 72 if(_count >= m_data[c].size()) 73 m_data[c].clear(); 74 else 75 m_data[c].erase(m_data[c].begin(), m_data[c].begin() + _count); 76 } 77 } 78 79 void AudioBuffer::fillPointers(TAudioOutputs& _pointers, size_t _offset) 80 { 81 for(size_t c=0; c<m_data.size(); ++c) 82 _pointers[c] = &m_data[c][_offset]; 83 } 84 85 void AudioBuffer::fillPointers(TAudioInputs& _pointers, size_t _offset) const 86 { 87 for(size_t c=0; c<m_data.size(); ++c) 88 _pointers[c] = &m_data[c][_offset]; 89 for(size_t c=m_data.size(); c<_pointers.size(); ++c) 90 _pointers[c] = nullptr; 91 } 92 93 size_t AudioBuffer::size() const 94 { 95 if(m_data.empty()) 96 return 0; 97 return m_data[0].size(); 98 } 99 100 void AudioBuffer::append(TChannel& _dst, const float* _data, size_t _size) 101 { 102 const auto oldSize = _dst.size(); 103 _dst.resize(oldSize + _size); 104 memcpy(&_dst[oldSize], _data, _size * sizeof(float)); 105 } 106 107 }