Esempio n. 1
0
        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()