public float GetSpectrumData(AudioVisualizationStrategy strategy, int index = 0) { float spectrumData = 0.0f; switch (strategy) { case AudioVisualizationStrategy.Raw: spectrumData = SpectrumData[index]; break; case AudioVisualizationStrategy.PostScaled: spectrumData = PostScaledSpectrumData[index]; break; case AudioVisualizationStrategy.PostScaledMinMax: spectrumData = PostScaledMinMaxSpectrumData[index]; break; case AudioVisualizationStrategy.PostScaledMax: spectrumData = PostScaledMax; break; case AudioVisualizationStrategy.PostScaledEnergy: spectrumData = PostScaledEnergy; break; } return(spectrumData); }
public float[] GetAllSpectrumData(AudioVisualizationStrategy strategy) { float[] spectrumData; switch (strategy) { case AudioVisualizationStrategy.Raw: spectrumData = SpectrumData; break; case AudioVisualizationStrategy.PostScaled: spectrumData = PostScaledSpectrumData; break; case AudioVisualizationStrategy.Smoothed: spectrumData = SmoothedSpectrumData; break; case AudioVisualizationStrategy.PostScaledMinMax: spectrumData = PostScaledMinMaxSpectrumData; break; default: throw new InvalidOperationException(string.Format("Invalid for GetAllSpectrumData: {0}", strategy)); } return(spectrumData); }
public float[] GetSpectrumData(AudioVisualizationStrategy strategy, bool smoothed, AudioVisualizationProfile profile) { var scaledSpectrumData = new float[SpectrumSize]; var scaledMinMaxSpectrumData = new float[SpectrumSize]; // Apply AudioVisualizationProfile var scaledMax = 0.0f; var scaledAverage = 0.0f; var scaledTotal = 0.0f; var scaleStep = 1.0f / SpectrumSize; // 2: Scaled. Scales against animation curve for (int i = 0; i < SpectrumSize; i++) { var scaledValue = profile.ScaleCurve.Evaluate(scaleStep * i) * _spectrumData[i]; scaledSpectrumData[i] = scaledValue; if (scaledSpectrumData[i] > scaledMax) { scaledMax = scaledSpectrumData[i]; } scaledTotal += scaledValue; } // 3: MinMax scaledAverage = scaledTotal / SpectrumSize; for (int i = 0; i < SpectrumSize; i++) { var scaledValue = scaledSpectrumData[i]; var cutoff = scaledAverage * profile.MinMaxThreshold; if (scaledValue <= cutoff) { scaledValue *= profile.MinScale; } else if (scaledValue >= cutoff) { scaledValue *= profile.MaxScale; } scaledMinMaxSpectrumData[i] = scaledValue; } // 4: Smoothed // We need a smoother for each combination of SpectrumSize/Iteration/Strategy var smootherId = $"{SpectrumSize}-{profile.AudioSmoothingIterations}-{strategy}"; if (!_spectrumSmoothers.ContainsKey(smootherId)) { _spectrumSmoothers.Add(smootherId, new SpectrumSmoother(SpectrumSize, profile.AudioSmoothingIterations)); } var smoother = _spectrumSmoothers[smootherId]; switch (strategy) { case AudioVisualizationStrategy.Raw: if (smoothed) { return(smoother.GetSpectrumData(_spectrumData)); } return(_spectrumData); case AudioVisualizationStrategy.Scaled: if (smoothed) { return(smoother.GetSpectrumData(scaledSpectrumData)); } return(scaledSpectrumData); case AudioVisualizationStrategy.ScaledMinMax: if (smoothed) { return(smoother.GetSpectrumData(scaledMinMaxSpectrumData)); } return(scaledMinMaxSpectrumData); default: throw new InvalidOperationException($"Invalid strategy: {strategy}"); } }
protected float GetAudioData(AudioVisualizationStrategy audioVisualizationStrategy, int index) { // Get audio data return(_loopbackAudio.GetSpectrumData(audioVisualizationStrategy, index)); }