Beispiel #1
0
std::shared_ptr<BufferListT<T> > createBufferList( uint32_t sampleCount, uint16_t channelCount, bool isInterleaved )
{
	void (*fn)( BufferListT<T> * ) = deleteBufferList;
	std::shared_ptr<BufferListT<T> > bufferList( new BufferListT<T>, fn );
	uint16_t bufferCount = 0;
	uint32_t bufferSize = 0;
	uint16_t channelsPerBuffer = 0;
	if( ! isInterleaved ) {
		bufferCount = channelCount;
		bufferSize = sampleCount;
		channelsPerBuffer = 1;
	} else {
		bufferCount = 1;
		bufferSize = sampleCount * channelCount;
		channelsPerBuffer = channelCount;
	}
	
	
	bufferList->mNumberBuffers = bufferCount;
	bufferList->mBuffers = new BufferT<T>[bufferCount];
	for( int i = 0; i < bufferCount; i++ ) {
		bufferList->mBuffers[i].mNumberChannels = channelsPerBuffer;
		bufferList->mBuffers[i].mDataByteSize = bufferSize * sizeof(T);
		bufferList->mBuffers[i].mData = new T[bufferSize];
		bufferList->mBuffers[i].mSampleCount = sampleCount;
	}
	
	return bufferList;
}
// ----------------------------------------------------------
ofxAudioUnitInput::RingBuffer::RingBuffer(UInt32 buffers, UInt32 channels, UInt32 samples) :
_readItrIndex(0), _writeItrIndex(0)
// ----------------------------------------------------------
{
	reserve(buffers);
	
	for(UInt32 i = 0; i < buffers; i++)
	{
		AudioBufferListRef bufferList(allocBufferList(channels,samples), releaseBufferList);
		push_back(bufferList);
	}
	
	_readItr = _writeItr = begin();
}