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(); }
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(); }