public List<SpectralImage> CutLogarithmizedSpectrum(float[][] logarithmizedSpectrum, int sampleRate, SpectrogramConfig configuration)
{
var strideBetweenConsecutiveImages = configuration.Stride;
int overlap = configuration.Overlap;
int index = GetFrequencyIndexLocationOfAudioSamples(strideBetweenConsecutiveImages.FirstStride, overlap);
int numberOfLogBins = configuration.LogBins;
var spectralImages = new List<SpectralImage>();
int width = logarithmizedSpectrum.GetLength(0);
int fingerprintImageLength = configuration.ImageLength;
int sequenceNumber = 0;
while (index + fingerprintImageLength <= width)
{
float[][] spectralImage = AllocateMemoryForFingerprintImage(fingerprintImageLength, numberOfLogBins);
for (int i = 0; i < fingerprintImageLength; i++)
{
Buffer.BlockCopy(logarithmizedSpectrum[index + i], 0, spectralImage[i], 0, numberOfLogBins * sizeof(float));
}
var startsAt = index * ((double)overlap / sampleRate);
spectralImages.Add(new SpectralImage(spectralImage, startsAt, sequenceNumber));
index += fingerprintImageLength + GetFrequencyIndexLocationOfAudioSamples(strideBetweenConsecutiveImages.NextStride, overlap);
sequenceNumber++;
}
return spectralImages;
}