public static Tuple <BaseSonogram, double[, ], double[], List <AcousticEvent>, double[], TimeSpan> Execute_ODDetect(FileInfo wavPath, bool doSegmentation, int minHz, int maxHz, double frameOverlap, double dctDuration, double dctThreshold, int minOscilFreq, int maxOscilFreq, double eventThreshold, double minDuration, double maxDuration) { //i: GET RECORDING AudioRecording recording = new AudioRecording(wavPath.FullName); //if (recording.SampleRate != 22050) recording.ConvertSampleRate22kHz(); // THIS METHOD CALL IS OBSOLETE int sr = recording.SampleRate; //ii: MAKE SONOGRAM Log.WriteLine("Start sonogram."); SonogramConfig sonoConfig = new SonogramConfig(); //default values config sonoConfig.WindowOverlap = frameOverlap; sonoConfig.SourceFName = recording.BaseName; BaseSonogram sonogram = new SpectrogramStandard(sonoConfig, recording.WavReader); Log.WriteLine("Signal: Duration={0}, Sample Rate={1}", sonogram.Duration, sr); Log.WriteLine("Frames: Size={0}, Count={1}, Duration={2:f1}ms, Overlap={5:f0}%, Offset={3:f1}ms, Frames/s={4:f1}", sonogram.Configuration.WindowSize, sonogram.FrameCount, sonogram.FrameDuration * 1000, sonogram.FrameStep * 1000, sonogram.FramesPerSecond, frameOverlap); int binCount = (int)(maxHz / sonogram.FBinWidth) - (int)(minHz / sonogram.FBinWidth) + 1; Log.WriteIfVerbose("Freq band: {0} Hz - {1} Hz. (Freq bin count = {2})", minHz, maxHz, binCount); Log.WriteIfVerbose("DctDuration=" + dctDuration + "sec. (# frames=" + (int)Math.Round(dctDuration * sonogram.FramesPerSecond) + ")"); Log.WriteIfVerbose("Score threshold for oscil events=" + eventThreshold); Log.WriteLine("Start OD event detection"); //iii: DETECT OSCILLATIONS bool normaliseDCT = true; List <AcousticEvent> predictedEvents; //predefinition of results event list double[] scores; //predefinition of score array double[,] hits; //predefinition of hits matrix - to superimpose on sonogram image double[] segments; //predefinition of segmentation of recording TimeSpan analysisTime; //predefinition of Time duration taken to do analysis on this file Oscillations2010.Execute((SpectrogramStandard)sonogram, doSegmentation, minHz, maxHz, dctDuration, dctThreshold, normaliseDCT, minOscilFreq, maxOscilFreq, eventThreshold, minDuration, maxDuration, out scores, out predictedEvents, out hits, out segments, out analysisTime); return(Tuple.Create(sonogram, hits, scores, predictedEvents, segments, analysisTime)); }//end CaneToadRecogniser