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