/// <summary>
/// Allocates caches retrievable in the Caches property.
/// </summary>
public void AllocateCaches(double duration, bool managedData)
{
if (!_isInited)
{
Start();
}
if (_streamToCache != null && Caches != null)
{
_streamToCache.ReleaseCache();
}
cacheDuration = duration;
_cacheNumFrames = ( int )(cacheDuration * GATInfo.OutputSampleRate);
useManagedData = managedData;
GATData[] caches = new GATData[_stream.NbOfChannels];
int i;
for (i = 0; i < caches.Length; i++)
{
if (useManagedData)
{
if (_cacheNumFrames > GATManager.DefaultDataAllocator.LargestFreeChunkSize)
{
int j;
for (j = 0; j < i; j++)
{
caches[i].Release();
}
throw new GATException("Chunk is too large to be allocated in managed memory, consider using unmanaged setting");
}
caches[i] = GATManager.GetDataContainer(_cacheNumFrames);
}
else
{
caches[i] = new GATData(new float[_cacheNumFrames]);
}
}
_streamToCache.Loop = _loopedCaching;
_streamToCache.Caches = caches;
}