void prepareToPlay()
    {
        if (juceFilter != 0)
        {
#if ! JucePlugin_IsSynth
            juceFilter->setPlayConfigDetails (GetInput(0)->GetStreamFormat().mChannelsPerFrame,
#else
            juceFilter->setPlayConfigDetails (0,
#endif
                                              GetOutput(0)->GetStreamFormat().mChannelsPerFrame,
                                              GetSampleRate(),
                                              GetMaxFramesPerSlice());

            bufferSpace.setSize (juceFilter->getNumInputChannels() + juceFilter->getNumOutputChannels(),
                                 GetMaxFramesPerSlice() + 32);

            juceFilter->prepareToPlay (GetSampleRate(),
                                       GetMaxFramesPerSlice());

            midiEvents.clear();

            juce_free (channels);
            channels = (float**) juce_calloc (sizeof (float*) * jmax (juceFilter->getNumInputChannels(),
                                                                      juceFilter->getNumOutputChannels()) + 4);

            prepared = true;
        }
//--------------------------------------------------------------------------------
OSStatus Tracker::Initialize()
{
	OSStatus status = AUEffectBase::Initialize();

	if (status == noErr)
	{
		summedInputBuffer = (float*) malloc(GetMaxFramesPerSlice() * sizeof(float));
		if (summedInputBuffer != NULL)
		{
			for (UInt32 i=0; i < GetMaxFramesPerSlice(); i++)
				summedInputBuffer[i] = 0.0f;
		}
		else
			status = memFullErr;
	}

	return status;
}
void	SonogramViewDemo::AllocateBuffers()
{
	mBlockSize = 1024;
	mNumBins = mBlockSize>>1;

	if (mSpectrumBuffer) {
		// delete calls deallocate
		delete (mSpectrumBuffer);
	}
	mSpectrumBuffer = new CARingBuffer();
	mSpectrumBuffer->Allocate(GetNumberOfChannels(), mNumBins*sizeof(Float32), kMaxSonogramLatency);

	CAStreamBasicDescription	bufClientDesc;		
	bufClientDesc.SetCanonical(GetNumberOfChannels(), false);
	bufClientDesc.mSampleRate = GetSampleRate();

	UInt32 frameLength = kDefaultValue_BufferSize*sizeof(Float32);
	
	if (mFetchingBufferList) {		
		mFetchingBufferList->DeallocateBuffers();
		delete(mFetchingBufferList);
	}
	mFetchingBufferList = CABufferList::New("fetch buffer", bufClientDesc );
	mFetchingBufferList->AllocateBuffers(frameLength);
	
	if (mSpectralDataBufferList) {
		mSpectralDataBufferList->DeallocateBuffers();
		delete(mSpectralDataBufferList);
	}
	mSpectralDataBufferList = CABufferList::New("temp buffer", bufClientDesc );
	mSpectralDataBufferList->AllocateBuffers(frameLength);

	memset (&mRenderStamp, 0, sizeof(AudioTimeStamp));
	mRenderStamp.mFlags = kAudioTimeStampSampleTimeValid;	
	
	
	mSpectralProcessor.free();
	mSpectralProcessor = new CASpectralProcessor(mBlockSize, mNumBins, GetNumberOfChannels(), GetMaxFramesPerSlice());
	
	if (mMinAmp) free(mMinAmp);
	mMinAmp = (Float32*) calloc(GetNumberOfChannels(), sizeof(Float32));
	
	if (mMaxAmp) free(mMaxAmp);
	mMaxAmp = (Float32*) calloc(GetNumberOfChannels(), sizeof(Float32));

		
}