using System; using System.Collections.Generic; using CSCore.DSP; namespace WinformsVisualization.Visualization { /// /// BasicSpectrumProvider /// public class BasicSpectrumProvider : FftProvider, ISpectrumProvider { private readonly int _sampleRate; private readonly List _contexts = new List(); public BasicSpectrumProvider(int channels, int sampleRate, FftSize fftSize) : base(channels, fftSize) { if (sampleRate <= 0) throw new ArgumentOutOfRangeException("sampleRate"); _sampleRate = sampleRate; } public int GetFftBandIndex(float frequency) { int fftSize = (int)FftSize; double f = _sampleRate / 2.0; // ReSharper disable once PossibleLossOfFraction return (int)((frequency / f) * (fftSize / 2)); } public bool GetFftData(float[] fftResultBuffer, object context) { if (_contexts.Contains(context)) return false; _contexts.Add(context); GetFftData(fftResultBuffer); return true; } public override void Add(float[] samples, int count) { base.Add(samples, count); if (count > 0) _contexts.Clear(); } public override void Add(float left, float right) { base.Add(left, right); _contexts.Clear(); } } }