Analysis(FileInfo fiSegmentOfSourceFile, Dictionary <string, string> config) { int minHzMale = ConfigDictionary.GetInt(LSKiwi1.key_MIN_HZ_MALE, config); int maxHzMale = ConfigDictionary.GetInt(LSKiwi1.key_MAX_HZ_MALE, config); int minHzFemale = ConfigDictionary.GetInt(LSKiwi1.key_MIN_HZ_FEMALE, config); int maxHzFemale = ConfigDictionary.GetInt(LSKiwi1.key_MAX_HZ_FEMALE, config); int frameLength = ConfigDictionary.GetInt(LSKiwi1.key_FRAME_LENGTH, config); double frameOverlap = ConfigDictionary.GetDouble(LSKiwi1.key_FRAME_OVERLAP, config); //double dctDuration = ConfigDictionary.GetDouble(LSKiwi1.key_DCT_DURATION, config); //double dctThreshold = ConfigDictionary.GetDouble(LSKiwi1.key_DCT_THRESHOLD, config); double minPeriod = ConfigDictionary.GetDouble(LSKiwi1.key_MIN_PERIODICITY, config); double maxPeriod = ConfigDictionary.GetDouble(LSKiwi1.key_MAX_PERIODICITY, config); double eventThreshold = ConfigDictionary.GetDouble(Keys.EVENT_THRESHOLD, config); double minDuration = ConfigDictionary.GetDouble(LSKiwi1.key_MIN_DURATION, config); //minimum event duration to qualify as species call double maxDuration = ConfigDictionary.GetDouble(LSKiwi1.key_MAX_DURATION, config); //maximum event duration to qualify as species call AudioRecording recording = new AudioRecording(fiSegmentOfSourceFile.FullName); if (recording == null) { Console.WriteLine("AudioRecording == null. Analysis not possible."); return(null); } TimeSpan tsRecordingtDuration = recording.Duration(); //i: MAKE SONOGRAM SonogramConfig sonoConfig = new SonogramConfig(); //default values config sonoConfig.SourceFName = recording.FileName; sonoConfig.WindowSize = frameLength; sonoConfig.WindowOverlap = frameOverlap; sonoConfig.NoiseReductionType = NoiseReductionType.STANDARD; //MUST DO NOISE REMOVAL BaseSonogram sonogram = new SpectralSonogram(sonoConfig, recording.GetWavReader()); //DETECT MALE KIWI var resultsMale = DetectKiwi(sonogram, minHzMale, maxHzMale, /*dctDuration, dctThreshold,*/ minPeriod, maxPeriod, eventThreshold, minDuration, maxDuration); var scoresM = resultsMale.Item1; var hitsM = resultsMale.Item2; var predictedEventsM = resultsMale.Item3; foreach (AcousticEvent ev in predictedEventsM) { ev.Name = "LSK(m)"; } //DETECT FEMALE KIWI var resultsFemale = DetectKiwi(sonogram, minHzFemale, maxHzFemale, /* dctDuration, dctThreshold,*/ minPeriod, maxPeriod, eventThreshold, minDuration, maxDuration); var scoresF = resultsFemale.Item1; var hitsF = resultsFemale.Item2; var predictedEventsF = resultsFemale.Item3; foreach (AcousticEvent ev in predictedEventsF) { ev.Name = "LSK(f)"; } //combine the male and female results hitsM = MatrixTools.AddMatrices(hitsM, hitsF); foreach (AcousticEvent ev in predictedEventsF) { predictedEventsM.Add(ev); } foreach (double[] array in scoresF) { scoresM.Add(array); } return(System.Tuple.Create(sonogram, hitsM, scoresM, predictedEventsM, tsRecordingtDuration)); } //Analysis()