Beispiel #1
0
        private Vector <float> GetActivations(SpectralODF sODF, Detectors detectionFunction)
        {
            Vector <float> activations;

            switch (detectionFunction)
            {
            case Detectors.HFC:
                activations = sODF.HFC();
                break;

            case Detectors.SD:
                activations = sODF.SD();
                break;

            case Detectors.SF:
                activations = sODF.SF();
                break;

            case Detectors.MKL:
                activations = sODF.MKL();
                break;

            case Detectors.PD:
                activations = sODF.PD();
                break;

            case Detectors.WPD:
                activations = sODF.WPD();
                break;

            case Detectors.NWPD:
                activations = sODF.NWPD();
                break;

            case Detectors.CD:
                activations = sODF.CD();
                break;

            case Detectors.RCD:
                activations = sODF.RCD();
                break;

            default:
                throw new Exception("Unsupported detection function");
                break;
            }

            return(activations);
        }
Beispiel #2
0
        private void GetOnsets(Wav w, MemoryAllocator allocator)
        {
            //construct the spectrogram
            var s = new Spectrogram(w, allocator, _options.WindowSize, _options.FPS, _options.Online, NeedPhaseInformation(_options.DetectionFunction));

            //perform adaptive whitening
            if (_options.AdaptiveWhitening)
            {
                s.AW(_options.AWFloor, _options.AWRelax);
            }

            //construct the filterbank
            var filt = new Filter(_options.WindowSize / 2, w.Samplerate, allocator);

            //filter the spectrogram
            s.Filter(filt.Filterbank);

            //take the log of the spectrogram
            if (_options.Log)
            {
                s.Log(_options.LogMultiplier, _options.LogAdd);
            }

            //calculate the activations
            var sodf = new SpectralODF(s, allocator);
            var act  = GetActivations(sodf, _options.DetectionFunction);

            //detect the onsets
            var o = new Onsets(act, _options.FPS);

            o.Detect(_options.ActivationThreshold, _options.MinimumTimeDelta, delay: w.Delay * 1000);
            var count = o.Detections.Count(f => f < (w.Delay + w.Padding));

            //add the onsets to the collection
            lock (_lock)
            {
                _onsets.AddRange(o.Detections.Skip(count));
                _amplitudes.AddRange(o.Amplitudes.Skip(count));
            }

            _completed++;
            ProgressReporter.Report(String.Format("{0}%", Math.Round((((float)_completed / _sliceCount)) * 100f)));

            //cleanup
            s.Cleanup();
            filt.Cleanup();
        }
Beispiel #3
0
        private void GetOnsets(Wav w, MemoryAllocator allocator)
        {
            //construct the spectrogram
            var s = new Spectrogram(w, allocator, _options.WindowSize, _options.FPS, _options.Online, NeedPhaseInformation(_options.DetectionFunction));

            //perform adaptive whitening
            if (_options.AdaptiveWhitening) s.AW(_options.AWFloor, _options.AWRelax);

            //construct the filterbank
            var filt = new Filter(_options.WindowSize / 2, w.Samplerate, allocator);

            //filter the spectrogram
            s.Filter(filt.Filterbank);

            //take the log of the spectrogram
            if (_options.Log) s.Log(_options.LogMultiplier, _options.LogAdd);

            //calculate the activations
            var sodf = new SpectralODF(s, allocator);
            var act = GetActivations(sodf, _options.DetectionFunction);

            //detect the onsets
            var o = new Onsets(act, _options.FPS);
            o.Detect(_options.ActivationThreshold, _options.MinimumTimeDelta,  delay: w.Delay * 1000);
            var count = o.Detections.Count(f => f < (w.Delay + w.Padding));

            //add the onsets to the collection
            lock (_lock)
            {
                _onsets.AddRange(o.Detections.Skip(count));
                _amplitudes.AddRange(o.Amplitudes.Skip(count));
            }

            _completed++;
            ProgressReporter.Report(String.Format("{0}%", Math.Round((((float)_completed / _sliceCount))*100f)));

            //cleanup
            s.Cleanup();
            filt.Cleanup();
        }
Beispiel #4
0
        private Vector<float> GetActivations(SpectralODF sODF, Detectors detectionFunction)
        {
            Vector<float> activations;
            switch (detectionFunction)
            {
                case Detectors.HFC:
                    activations = sODF.HFC();
                    break;
                case Detectors.SD:
                    activations = sODF.SD();
                    break;
                case Detectors.SF:
                    activations = sODF.SF();
                    break;
                case Detectors.MKL:
                    activations = sODF.MKL();
                    break;
                case Detectors.PD:
                    activations = sODF.PD();
                    break;
                case Detectors.WPD:
                    activations = sODF.WPD();
                    break;
                case Detectors.NWPD:
                    activations = sODF.NWPD();
                    break;
                case Detectors.CD:
                    activations = sODF.CD();
                    break;
                case Detectors.RCD:
                    activations = sODF.RCD();
                    break;
                default:
                    throw new Exception("Unsupported detection function");
                    break;
            }

            return activations;
        }