public static List <double[]> ReadFrameData(DirectoryInfo dataDir, string fileStem, TimeSpan startTime, TimeSpan maxDuration, SpectrogramZoomingConfig zoomingConfig, TimeSpan indexGenerationSegmentDuration) { TimeSpan endTime = startTime + maxDuration; int startMinute = (int)Math.Floor(startTime.TotalMinutes); int endMinute = (int)Math.Ceiling(endTime.TotalMinutes); int expectedDataDurationInSeconds = (int)indexGenerationSegmentDuration.TotalSeconds; int expectedFrameCount = (int)Math.Round(expectedDataDurationInSeconds / zoomingConfig.SpectralFrameDuration); string name = fileStem + "_" + startMinute + "min.csv"; string csvPath = Path.Combine(dataDir.FullName, name); bool skipHeader = true; bool skipFirstColumn = true; List <double[]> frameData = CsvTools.ReadCSVFileOfDoubles(csvPath, skipHeader, skipFirstColumn); ZoomTiledSpectrograms.PadEndOfListOfFrames(frameData, expectedFrameCount); for (int i = startMinute + 1; i < endMinute; i++) { name = fileStem + "_" + i + "min.csv"; csvPath = Path.Combine(dataDir.FullName, name); List <double[]> data = CsvTools.ReadCSVFileOfDoubles(csvPath, skipHeader, skipFirstColumn); ZoomTiledSpectrograms.PadEndOfListOfFrames(data, expectedFrameCount); frameData.AddRange(data); } return(frameData); }