private void Visualizer_Draw(AudioVisualizer.IVisualizer sender, AudioVisualizer.VisualizerDrawEventArgs args) { var drawingSession = (CanvasDrawingSession)args.DrawingSession; var spectrum = args.Data != null?args.Data.Spectrum.TransformLinearFrequency(20) : _emptySpectrum; _previousSpectrum = spectrum.ApplyRiseAndFall(_previousSpectrum, _rmsRiseTime, _rmsFallTime, _frameDuration); _previousPeakSpectrum = spectrum.ApplyRiseAndFall(_previousPeakSpectrum, _peakRiseTime, _peakFallTime, _frameDuration); // This is temp hack. once visualizer passes in dimensions won't be necessary float w = 0f, h = 0f; lock (_sizeLock) { w = _visualizerWidth; h = _visualizerHeight; } // There are bugs in ConverToLogAmplitude. It is returning 0 if max is not 0 and min negative. // The heightScale is a workaround for this var s = _previousSpectrum.ConvertToLogAmplitude(-50, 0); var p = _previousPeakSpectrum.ConvertToLogAmplitude(-50, 0); DrawSpectrumSpline(p[0], drawingSession, Vector2.Zero, w, h, -0.02f, Color.FromArgb(0xff, 0x38, 0x38, 0x38)); DrawSpectrumSpline(p[1], drawingSession, Vector2.Zero, w, h, -0.02f, Color.FromArgb(0xff, 0x38, 0x38, 0x38), true); DrawSpectrumSpline(s[0], drawingSession, Vector2.Zero, w, h, -0.02f, Color.FromArgb(0xff, 0x30, 0x30, 0x30)); DrawSpectrumSpline(s[1], drawingSession, Vector2.Zero, w, h, -0.02f, Color.FromArgb(0xff, 0x30, 0x30, 0x30), true); }