Exemplo n.º 1
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();
        }
Exemplo n.º 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();
        }