diff --git a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesView.xaml b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesView.xaml
index a400d2b0a..8d286d08c 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesView.xaml
+++ b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioPropertiesView.xaml
@@ -47,7 +47,7 @@
VerticalAlignment="Top" Height="18" />
diff --git a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs
index 6db7563b3..5a71b24fa 100644
--- a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs
+++ b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs
@@ -28,7 +28,8 @@ namespace Artemis.Profiles.Layers.Types.Audio
private readonly WasapiLoopbackCapture _waveIn;
private DateTime _lastAudioUpdate;
private int _lines;
- private AudioPropertiesModel _previousSettings;
+ private string _previousSettings;
+ private DateTime _lastUpdate;
public AudioType()
{
@@ -223,7 +224,7 @@ namespace Artemis.Profiles.Layers.Types.Audio
audioLayer.Properties.Width = settings.Width;
audioLayer.Properties.Height = settings.Height;
audioLayer.LayerAnimation?.Update(audioLayer, true);
-
+
// Restore the height and width
audioLayer.Properties.Height = oldHeight;
audioLayer.Properties.Width = oldWidth;
@@ -235,20 +236,34 @@ namespace Artemis.Profiles.Layers.Types.Audio
///
private void UpdateLayers(LayerModel layerModel)
{
- // TODO: Animation
- var settings = (AudioPropertiesModel) layerModel.Properties;
- if ((settings.Direction == _previousSettings?.Direction) &&
- (settings.Sensitivity == _previousSettings.Sensitivity) &&
- (Math.Abs(settings.FadeSpeed - _previousSettings.FadeSpeed) < 0.001))
- return;
+ // TODO: Animation every frame before checking settings
- _previousSettings = GeneralHelpers.Clone((AudioPropertiesModel) layerModel.Properties);
+ // Checking on settings update is expensive, only do it every second
+ if (DateTime.Now - _lastUpdate < TimeSpan.FromSeconds(1))
+ return;
+ _lastUpdate = DateTime.Now;
+
+ var settings = (AudioPropertiesModel) layerModel.Properties;
+ var currentSettings = JsonConvert.SerializeObject(settings, Formatting.Indented);
+ if (currentSettings == _previousSettings)
+ return;
+
+ _previousSettings = JsonConvert.SerializeObject(settings, Formatting.Indented);
_audioLayers.Clear();
- if ((settings.Direction == Direction.TopToBottom) || (settings.Direction == Direction.BottomToTop))
- SetupVertical(settings);
- else if ((settings.Direction == Direction.LeftToRight) || (settings.Direction == Direction.RightToLeft))
- SetupHorizontal(settings);
+ switch (settings.Direction)
+ {
+ case Direction.TopToBottom:
+ case Direction.BottomToTop:
+ SetupVertical(settings);
+ break;
+ case Direction.LeftToRight:
+ case Direction.RightToLeft:
+ SetupHorizontal(settings);
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
}
private void SetupVertical(AudioPropertiesModel settings)