From fdf78e34b8dfaa33cfd025d774126ecbedebd9a1 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Sun, 13 Aug 2017 13:06:36 +0200 Subject: [PATCH] Persisted configuration --- KeyboardAudioVisualizer/App.xaml.cs | 1 + KeyboardAudioVisualizer/ApplicationManager.cs | 1 + .../AudioProcessing/AudioProcessor.cs | 14 ++++-- .../Equalizer/EqualizerBand.cs | 4 +- .../Configuration/EqualizerConfiguration.cs | 48 +++++++++++++++++++ .../Configuration/Settings.cs | 25 ++++++++++ .../KeyboardAudioVisualizer.csproj | 3 +- KeyboardAudioVisualizer/Settings.cs | 6 --- 8 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 KeyboardAudioVisualizer/Configuration/EqualizerConfiguration.cs create mode 100644 KeyboardAudioVisualizer/Configuration/Settings.cs delete mode 100644 KeyboardAudioVisualizer/Settings.cs diff --git a/KeyboardAudioVisualizer/App.xaml.cs b/KeyboardAudioVisualizer/App.xaml.cs index 2585ed0..ee0e71f 100644 --- a/KeyboardAudioVisualizer/App.xaml.cs +++ b/KeyboardAudioVisualizer/App.xaml.cs @@ -3,6 +3,7 @@ using System.IO; using System.Windows; using Hardcodet.Wpf.TaskbarNotification; using KeyboardAudioVisualizer.AudioProcessing; +using KeyboardAudioVisualizer.Configuration; using KeyboardAudioVisualizer.Helper; namespace KeyboardAudioVisualizer diff --git a/KeyboardAudioVisualizer/ApplicationManager.cs b/KeyboardAudioVisualizer/ApplicationManager.cs index 7269f9c..017b83b 100644 --- a/KeyboardAudioVisualizer/ApplicationManager.cs +++ b/KeyboardAudioVisualizer/ApplicationManager.cs @@ -1,6 +1,7 @@ using System.Windows; using KeyboardAudioVisualizer.AudioProcessing; using KeyboardAudioVisualizer.Brushes; +using KeyboardAudioVisualizer.Configuration; using KeyboardAudioVisualizer.Helper; using KeyboardAudioVisualizer.UI; using RGB.NET.Brushes; diff --git a/KeyboardAudioVisualizer/AudioProcessing/AudioProcessor.cs b/KeyboardAudioVisualizer/AudioProcessing/AudioProcessor.cs index aa50b5d..ff770d1 100644 --- a/KeyboardAudioVisualizer/AudioProcessing/AudioProcessor.cs +++ b/KeyboardAudioVisualizer/AudioProcessing/AudioProcessor.cs @@ -58,16 +58,20 @@ namespace KeyboardAudioVisualizer.AudioProcessing _spectrumProvider = new FourierSpectrumProvider(_audioBuffer); _spectrumProvider.Initialize(); - //TODO DarthAffe 03.08.2017: Initialize correctly; Settings - MultiBandEqualizer equalizer = new MultiBandEqualizer { IsEnabled = false }; - PrimaryVisualizationProvider = new FrequencyBarsVisualizationProvider(new FrequencyBarsVisualizationProviderConfiguration(), _spectrumProvider) { Equalizer = equalizer }; + //TODO DarthAffe 13.08.2017: Refactore Settings-stuff to work with multiple providers + + MultiBandEqualizer equalizer = new MultiBandEqualizer(); + ApplicationManager.Instance.Settings.EqualizerConfiguration.LoadInto(equalizer); + equalizer.PropertyChanged += (sender, args) => ApplicationManager.Instance.Settings.EqualizerConfiguration.SaveFrom(equalizer); + + PrimaryVisualizationProvider = new FrequencyBarsVisualizationProvider(ApplicationManager.Instance.Settings.FrequencyBarsVisualizationProviderConfiguration, _spectrumProvider) { Equalizer = equalizer }; //PrimaryVisualizationProvider = new BeatVisualizationProvider(new BeatVisualizationProviderConfiguration(), _spectrumProvider); PrimaryVisualizationProvider.Initialize(); - SecondaryVisualizationProvider = new BeatVisualizationProvider(new BeatVisualizationProviderConfiguration(), _spectrumProvider); + SecondaryVisualizationProvider = new BeatVisualizationProvider(ApplicationManager.Instance.Settings.BeatVisualizationProviderConfiguration, _spectrumProvider); SecondaryVisualizationProvider.Initialize(); - TertiaryVisualizationProvider = new LevelVisualizationProvider(new LevelVisualizationProviderConfiguration(), _audioBuffer); + TertiaryVisualizationProvider = new LevelVisualizationProvider(ApplicationManager.Instance.Settings.LevelVisualizationProviderConfiguration, _audioBuffer); TertiaryVisualizationProvider.Initialize(); } diff --git a/KeyboardAudioVisualizer/AudioProcessing/Equalizer/EqualizerBand.cs b/KeyboardAudioVisualizer/AudioProcessing/Equalizer/EqualizerBand.cs index 0e57aeb..8c2687b 100644 --- a/KeyboardAudioVisualizer/AudioProcessing/Equalizer/EqualizerBand.cs +++ b/KeyboardAudioVisualizer/AudioProcessing/Equalizer/EqualizerBand.cs @@ -25,12 +25,14 @@ namespace KeyboardAudioVisualizer.AudioProcessing.Equalizer set => SetProperty(ref _value, float.IsNaN(value) ? 0 : MathHelper.Clamp(value, -1, 1)); } - public bool IsFixedOffset { get; } + public bool IsFixedOffset { get; set; } #endregion #region Constructors + public EqualizerBand() : this(0) { } + public EqualizerBand(float offset, float value = 0, bool fixedOffset = false) { this.Offset = offset; diff --git a/KeyboardAudioVisualizer/Configuration/EqualizerConfiguration.cs b/KeyboardAudioVisualizer/Configuration/EqualizerConfiguration.cs new file mode 100644 index 0000000..8f13802 --- /dev/null +++ b/KeyboardAudioVisualizer/Configuration/EqualizerConfiguration.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using KeyboardAudioVisualizer.AudioProcessing.Equalizer; + +namespace KeyboardAudioVisualizer.Configuration +{ + public class EqualizerConfiguration : AbstractConfiguration + { + #region Properties & Fields + + public bool IsEnabled { get; set; } = false; + + public List Bands { get; set; } = new List(); + + #endregion + + #region Methods + + public void LoadInto(IEqualizer equalizer) + { + equalizer.IsEnabled = IsEnabled; + + foreach (EqualizerBand band in Bands) + { + if (band.IsFixedOffset) + { + EqualizerBand bandToUpdate = equalizer.Bands.FirstOrDefault(b => b.IsFixedOffset && (Math.Abs(b.Offset - band.Offset) < 0.01)); + if (bandToUpdate != null) + bandToUpdate.Value = band.Value; + } + else + equalizer.AddBand(band.Offset, band.Value); + } + } + + public void SaveFrom(IEqualizer equalizer) + { + IsEnabled = equalizer.IsEnabled; + + Bands.Clear(); + foreach (EqualizerBand band in equalizer.Bands) + Bands.Add(new EqualizerBand(band.Offset, band.Value, band.IsFixedOffset)); + } + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/Configuration/Settings.cs b/KeyboardAudioVisualizer/Configuration/Settings.cs new file mode 100644 index 0000000..4881aee --- /dev/null +++ b/KeyboardAudioVisualizer/Configuration/Settings.cs @@ -0,0 +1,25 @@ +using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider; + +namespace KeyboardAudioVisualizer.Configuration +{ + public class Settings + { + #region General + + public double UpdateRate { get; set; } = 40.0; + + #endregion + + #region AudioProcessing + + public EqualizerConfiguration EqualizerConfiguration { get; set; } = new EqualizerConfiguration(); + + public FrequencyBarsVisualizationProviderConfiguration FrequencyBarsVisualizationProviderConfiguration { get; set; } = new FrequencyBarsVisualizationProviderConfiguration(); + + public LevelVisualizationProviderConfiguration LevelVisualizationProviderConfiguration { get; set; } = new LevelVisualizationProviderConfiguration(); + + public BeatVisualizationProviderConfiguration BeatVisualizationProviderConfiguration { get; set; } = new BeatVisualizationProviderConfiguration(); + + #endregion + } +} diff --git a/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj b/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj index 8988d84..1de1e7e 100644 --- a/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj +++ b/KeyboardAudioVisualizer/KeyboardAudioVisualizer.csproj @@ -127,6 +127,7 @@ + @@ -140,7 +141,7 @@ - + diff --git a/KeyboardAudioVisualizer/Settings.cs b/KeyboardAudioVisualizer/Settings.cs deleted file mode 100644 index ed082f0..0000000 --- a/KeyboardAudioVisualizer/Settings.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace KeyboardAudioVisualizer -{ - public class Settings - { - } -}