13namespace tracktion {
inline namespace graph
53 choc::buffer::ChannelArrayBuffer<float>
allocate (choc::buffer::Size);
56 void release (choc::buffer::ChannelArrayBuffer<float>&&);
63 void reserve (
size_t numBuffers, choc::buffer::Size);
89 choc::buffer::ChannelArrayBuffer<float> buffer;
93 buffer = std::move (stack.
top());
96 if (
auto bufferSize = buffer.getSize();
97 bufferSize.numChannels < size.numChannels
98 || bufferSize.numFrames < size.numFrames)
100 buffer.resize (size);
105 buffer.resize (size);
113 stack.
push (std::move (buffer));
122 for (
size_t i = 0; i <
std::min (numBuffers, stack.
size()); ++i)
129 for (
auto& b : buffers)
131 if (
auto bufferSize = b.getSize();
132 bufferSize.numChannels < size.numChannels
133 || bufferSize.numFrames < size.numFrames)
140 const int numToAdd =
static_cast<int> (numBuffers) -
static_cast<int> (buffers.
size());
144 for (
auto& b : buffers)
145 stack.
push (std::move (b));
148 for (
int i = 0; i < numToAdd; ++i)
149 stack.
push (choc::buffer::ChannelArrayBuffer<float> (size));
159 if (stack.
size() == 0)
162 auto& b = stack.
top();
163 return b.getView().data.getBytesNeeded (b.getSize());
A stack of audio buffers.
choc::buffer::ChannelArrayBuffer< float > allocate(choc::buffer::Size)
Returns an allocated buffer for a given size from the stack.
void reset()
Releases all the internal allocated storage.
size_t getAllocatedSize()
Returns the currently allocated size of all the buffers in bytes.
AudioBufferStack()=default
Create an empty stack.
void reserve(size_t numBuffers, choc::buffer::Size)
Reserves a number of buffers of a given size, preallocating them.
size_t getNumBuffers()
Returns the current number of buffers in the stack.
void release(choc::buffer::ChannelArrayBuffer< float > &&)
Releases an allocated buffer back to the stack.
T emplace_back(T... args)