/// <summary> /// Construct extractor from sampling rate, frame duration and hop duration (in seconds) /// </summary> /// <param name="samplingRate"></param> protected FeatureExtractor(FeatureExtractorOptions options) { if (options.Errors.Count > 0) { throw new ArgumentException("Invalid configuration:\r\n" + string.Join("\r\n", options.Errors)); } SamplingRate = options.SamplingRate; FrameDuration = options.FrameDuration; HopDuration = options.HopDuration; FrameSize = (int)(SamplingRate * FrameDuration); HopSize = (int)(SamplingRate * HopDuration); _blockSize = FrameSize; _preEmphasis = (float)options.PreEmphasis; _window = options.Window; if (_window != WindowTypes.Rectangular) { _windowSamples = Window.OfType(_window, FrameSize); } }
/// <summary> /// Constructs extractor from configuration <paramref name="options"/>. /// </summary> protected FeatureExtractor(FeatureExtractorOptions options) { if (options.Errors.Count > 0) { throw new ArgumentException("Invalid configuration:\r\n" + string.Join("\r\n", options.Errors)); } SamplingRate = options.SamplingRate; if (options.FrameSize > 0) // frame size has priority over frame duration { FrameSize = options.FrameSize; FrameDuration = (double)FrameSize / SamplingRate; } else { FrameDuration = options.FrameDuration; FrameSize = (int)Math.Round(SamplingRate * FrameDuration, MidpointRounding.AwayFromZero); } if (options.HopSize > 0) // hop size has priority over hop duration { HopSize = options.HopSize; HopDuration = (double)HopSize / SamplingRate; } else { HopDuration = options.HopDuration; HopSize = (int)Math.Round(SamplingRate * HopDuration, MidpointRounding.AwayFromZero); } _blockSize = FrameSize; _preEmphasis = (float)options.PreEmphasis; _window = options.Window; if (_window != WindowType.Rectangular) { _windowSamples = Window.OfType(_window, FrameSize); } }