mirror of
https://github.com/DarthAffe/KeyboardAudioVisualizer.git
synced 2026-11-11 13:06:26 +00:00
Added color-settings to resolve #2
This commit is contained in:
1 parent
d4b4071f71
commit
2f9286e39d
23 files changed
+1646
-96
No files matched your search
@@ -42,7 +42,7 @@
|
||||
|
||||
<controls:Form Grid.Column="2">
|
||||
<Label controls:Form.IsLabel="True" Content="Scale:" />
|
||||
<Slider controls:Form.Fill="True" Minimum="1" Maximum="20" IsSnapToTickEnabled="True" TickFrequency="0.5" TickPlacement="BottomRight"
|
||||
<Slider controls:Form.Fill="True" Minimum="1" Maximum="40" IsSnapToTickEnabled="True" TickFrequency="0.5" TickPlacement="BottomRight"
|
||||
Value="{Binding Scale}"
|
||||
ToolTip="Scales the whole graph." />
|
||||
</controls:Form>
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
xmlns:keyboardAudioVisualizer="clr-namespace:KeyboardAudioVisualizer"
|
||||
xmlns:converter="clr-namespace:KeyboardAudioVisualizer.Converter"
|
||||
xmlns:visualizationProvider="clr-namespace:KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider"
|
||||
xmlns:helper="clr-namespace:KeyboardAudioVisualizer.Helper"
|
||||
xmlns:sys="clr-namespace:System;assembly=mscorlib"
|
||||
xmlns:attached="clr-namespace:KeyboardAudioVisualizer.Attached"
|
||||
xmlns:helper="clr-namespace:KeyboardAudioVisualizer.Helper"
|
||||
mc:Ignorable="d"
|
||||
Title="Keyboard Audio-Visualizer # Configuration"
|
||||
Icon="pack://application:,,,/KeyboardAudioVisualizer;component/Resources/Icon.ico"
|
||||
@@ -56,6 +56,10 @@
|
||||
<AdornerDecorator>
|
||||
<DockPanel LastChildFill="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Visualizations[(helper:VisualizationIndex)Primary], Converter={StaticResource VisualizationToLastChildFillConverter}}">
|
||||
<GroupBox DockPanel.Dock="Top">
|
||||
<controls:GradientEditor Gradient="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Settings[(helper:VisualizationIndex)Primary].Gradient}" />
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Margin="0,8,0,0" DockPanel.Dock="Top">
|
||||
<controls:Form>
|
||||
<controls:Form.Resources>
|
||||
<Style BasedOn="{StaticResource StyleLabelForm}" TargetType="Label" />
|
||||
@@ -78,7 +82,7 @@
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Margin="0,8,0,0" DockPanel.Dock="Top">
|
||||
<ContentControl Content="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Visualizations[(helper:VisualizationIndex)Primary]}" />
|
||||
<ContentControl Content="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Visualizations[(helper:VisualizationIndex)Primary]}" Tag="0" />
|
||||
</GroupBox>
|
||||
</DockPanel>
|
||||
</AdornerDecorator>
|
||||
@@ -88,6 +92,11 @@
|
||||
<AdornerDecorator>
|
||||
<DockPanel LastChildFill="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Visualizations[(helper:VisualizationIndex)Secondary], Converter={StaticResource VisualizationToLastChildFillConverter}}">
|
||||
<GroupBox DockPanel.Dock="Top">
|
||||
<controls:GradientEditor Gradient="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Settings[(helper:VisualizationIndex)Secondary].Gradient}"
|
||||
CanAddOrDeleteStops="False" />
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Margin="0,8,0,0" DockPanel.Dock="Top">
|
||||
<controls:Form>
|
||||
<controls:Form.Resources>
|
||||
<Style BasedOn="{StaticResource StyleLabelForm}" TargetType="Label" />
|
||||
@@ -109,7 +118,7 @@
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Margin="0,8,0,0" DockPanel.Dock="Top">
|
||||
<ContentControl Content="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Visualizations[(helper:VisualizationIndex)Secondary]}" />
|
||||
<ContentControl Content="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Visualizations[(helper:VisualizationIndex)Secondary]}" Tag="1" />
|
||||
</GroupBox>
|
||||
</DockPanel>
|
||||
</AdornerDecorator>
|
||||
@@ -119,6 +128,10 @@
|
||||
<AdornerDecorator>
|
||||
<DockPanel LastChildFill="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Visualizations[(helper:VisualizationIndex)Tertiary], Converter={StaticResource VisualizationToLastChildFillConverter}}">
|
||||
<GroupBox DockPanel.Dock="Top">
|
||||
<controls:GradientEditor Gradient="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Settings[(helper:VisualizationIndex)Tertiary].Gradient}" />
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Margin="0,8,0,0" DockPanel.Dock="Top">
|
||||
<controls:Form>
|
||||
<controls:Form.Resources>
|
||||
<Style BasedOn="{StaticResource StyleLabelForm}" TargetType="Label" />
|
||||
@@ -140,7 +153,7 @@
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Margin="0,8,0,0" DockPanel.Dock="Top">
|
||||
<ContentControl Content="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Visualizations[(helper:VisualizationIndex)Tertiary]}" />
|
||||
<ContentControl Content="{Binding Source={x:Static keyboardAudioVisualizer:ApplicationManager.Instance}, Path=Visualizations[(helper:VisualizationIndex)Tertiary]}" Tag="2" />
|
||||
</GroupBox>
|
||||
</DockPanel>
|
||||
</AdornerDecorator>
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
</Style>
|
||||
|
||||
<DataTemplate DataType="{x:Type visualizationProvider:BeatVisualizationProvider}">
|
||||
<visualization:BeatVisualizer Style="{StaticResource StyleBeatVisualizer}" VisualizationProvider="{Binding}" />
|
||||
<visualization:BeatVisualizer Style="{StaticResource StyleBeatVisualizer}"
|
||||
VisualizationProvider="{Binding}"
|
||||
VisualizationIndex="{Binding Tag, RelativeSource={RelativeSource AncestorType=ContentControl}}" />
|
||||
</DataTemplate>
|
||||
|
||||
</styles:CachedResourceDictionary>
|
||||
|
||||
@@ -4,14 +4,20 @@ using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Threading;
|
||||
using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider;
|
||||
using KeyboardAudioVisualizer.Helper;
|
||||
using RGB.NET.Brushes.Gradients;
|
||||
using RGB.NET.Core;
|
||||
using Color = System.Windows.Media.Color;
|
||||
using Point = System.Windows.Point;
|
||||
|
||||
namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
{
|
||||
public class BeatVisualizer : Control
|
||||
{
|
||||
#region Properties & Fields
|
||||
|
||||
private LinearGradient _gradient;
|
||||
|
||||
#endregion
|
||||
|
||||
#region DependencyProperties
|
||||
// ReSharper disable InconsistentNaming
|
||||
|
||||
@@ -24,6 +30,15 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
set => SetValue(VisualizationProviderProperty, value);
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty VisualizationIndexProperty = DependencyProperty.Register(
|
||||
"VisualizationIndex", typeof(VisualizationIndex?), typeof(BeatVisualizer), new PropertyMetadata(null, VisualizationIndexChanged));
|
||||
|
||||
public VisualizationIndex? VisualizationIndex
|
||||
{
|
||||
get => (VisualizationIndex?)GetValue(VisualizationIndexProperty);
|
||||
set => SetValue(VisualizationIndexProperty, value);
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty BrushProperty = DependencyProperty.Register(
|
||||
"Brush", typeof(Brush), typeof(BeatVisualizer), new PropertyMetadata(default(Brush)));
|
||||
|
||||
@@ -52,7 +67,7 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
RGBSurface.Instance.Updated += args => Dispatcher.BeginInvoke(new Action(Update), DispatcherPriority.Normal);
|
||||
|
||||
//TODO DarthAffe 12.08.2017: Create brush from config
|
||||
Brush = new SolidColorBrush(Color.FromRgb(255, 255, 255));
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -75,6 +90,37 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
}
|
||||
}
|
||||
|
||||
private static void VisualizationIndexChanged(DependencyObject dependencyObject,
|
||||
DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
|
||||
{
|
||||
if (!(dependencyObject is BeatVisualizer visualizer)) return;
|
||||
visualizer.UpdateGradient();
|
||||
}
|
||||
|
||||
private void UpdateGradient()
|
||||
{
|
||||
void GradientChanged(object sender, EventArgs args) => UpdateColor();
|
||||
if (_gradient != null)
|
||||
_gradient.GradientChanged -= GradientChanged;
|
||||
|
||||
_gradient = VisualizationIndex.HasValue ? ApplicationManager.Instance.Settings[VisualizationIndex.Value].Gradient : null;
|
||||
if (_gradient != null)
|
||||
_gradient.GradientChanged += GradientChanged;
|
||||
|
||||
UpdateColor();
|
||||
}
|
||||
|
||||
private void UpdateColor()
|
||||
{
|
||||
if (_gradient == null) return;
|
||||
|
||||
GradientStopCollection gradientStops = new GradientStopCollection();
|
||||
foreach (RGB.NET.Brushes.Gradients.GradientStop stop in _gradient.GradientStops)
|
||||
gradientStops.Add(new System.Windows.Media.GradientStop(System.Windows.Media.Color.FromArgb(stop.Color.A, stop.Color.R, stop.Color.G, stop.Color.B), stop.Offset));
|
||||
|
||||
Brush = new LinearGradientBrush(gradientStops, new System.Windows.Point(0, 0.5), new System.Windows.Point(1, 0.5));
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -31,8 +31,11 @@
|
||||
|
||||
<DataTemplate DataType="{x:Type visualizationProvider:FrequencyBarsVisualizationProvider}">
|
||||
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
|
||||
<visualization:FrequencyBarsVisualizer Style="{StaticResource StyleFrequencyBarsVisualizer}" VisualizationProvider="{Binding}" />
|
||||
<visualization:EqualizerVisualizer Style="{StaticResource StyleEqualizerVisualizer}" Equalizer="{Binding Equalizer}" />
|
||||
<visualization:FrequencyBarsVisualizer Style="{StaticResource StyleFrequencyBarsVisualizer}"
|
||||
VisualizationProvider="{Binding}"
|
||||
VisualizationIndex="{Binding Tag, RelativeSource={RelativeSource AncestorType=ContentControl}}" />
|
||||
<visualization:EqualizerVisualizer Style="{StaticResource StyleEqualizerVisualizer}"
|
||||
Equalizer="{Binding Equalizer}" />
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Threading;
|
||||
using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider;
|
||||
using KeyboardAudioVisualizer.Helper;
|
||||
using RGB.NET.Brushes.Gradients;
|
||||
using RGB.NET.Core;
|
||||
using Color = System.Windows.Media.Color;
|
||||
@@ -27,12 +28,22 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
get => (IVisualizationProvider)GetValue(VisualizationProviderProperty);
|
||||
set => SetValue(VisualizationProviderProperty, value);
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty VisualizationIndexProperty = DependencyProperty.Register(
|
||||
"VisualizationIndex", typeof(VisualizationIndex?), typeof(FrequencyBarsVisualizer), new PropertyMetadata(null, VisualizationIndexChanged));
|
||||
|
||||
public VisualizationIndex? VisualizationIndex
|
||||
{
|
||||
get => (VisualizationIndex?)GetValue(VisualizationIndexProperty);
|
||||
set => SetValue(VisualizationIndexProperty, value);
|
||||
}
|
||||
|
||||
// ReSharper restore InconsistentNaming
|
||||
#endregion
|
||||
|
||||
#region Properties & Fields
|
||||
|
||||
private IGradient _gradient;
|
||||
private LinearGradient _gradient;
|
||||
private Panel _panel;
|
||||
private Rectangle[] _bars = new Rectangle[0];
|
||||
|
||||
@@ -44,9 +55,6 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
{
|
||||
RGBSurface.Instance.Updated += args => Dispatcher.BeginInvoke(new Action(Update), DispatcherPriority.Normal);
|
||||
SizeChanged += (sender, args) => UpdateSizes();
|
||||
|
||||
//TODO DarthAffe 12.08.2017: Get gradient from config
|
||||
_gradient = new RainbowGradient(300, -14);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -65,8 +73,7 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
private static void VisualizationProviderChanged(DependencyObject dependencyObject,
|
||||
DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
|
||||
{
|
||||
FrequencyBarsVisualizer visualizer = dependencyObject as FrequencyBarsVisualizer;
|
||||
if (visualizer == null) return;
|
||||
if (!(dependencyObject is FrequencyBarsVisualizer visualizer)) return;
|
||||
|
||||
void ConfigurationOnPropertyChanged(object sender, PropertyChangedEventArgs args) => visualizer.ConfigurationChanged(args.PropertyName);
|
||||
|
||||
@@ -77,6 +84,26 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
newVisualizationProvider.Configuration.PropertyChanged += ConfigurationOnPropertyChanged;
|
||||
}
|
||||
|
||||
private static void VisualizationIndexChanged(DependencyObject dependencyObject,
|
||||
DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
|
||||
{
|
||||
if (!(dependencyObject is FrequencyBarsVisualizer visualizer)) return;
|
||||
visualizer.UpdateGradient();
|
||||
}
|
||||
|
||||
private void UpdateGradient()
|
||||
{
|
||||
void GradientChanged(object sender, EventArgs args) => UpdateColors();
|
||||
if (_gradient != null)
|
||||
_gradient.GradientChanged -= GradientChanged;
|
||||
|
||||
_gradient = VisualizationIndex.HasValue ? ApplicationManager.Instance.Settings[VisualizationIndex.Value].Gradient : null;
|
||||
if (_gradient != null)
|
||||
_gradient.GradientChanged += GradientChanged;
|
||||
|
||||
UpdateColors();
|
||||
}
|
||||
|
||||
private void ConfigurationChanged(string changedPropertyName)
|
||||
{
|
||||
if ((changedPropertyName == null) || (changedPropertyName == nameof(FrequencyBarsVisualizationProviderConfiguration.Bars)))
|
||||
@@ -119,6 +146,8 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
|
||||
private void UpdateColors()
|
||||
{
|
||||
if (_gradient == null) return;
|
||||
|
||||
for (int i = 0; i < _bars.Length; i++)
|
||||
{
|
||||
RGB.NET.Core.Color color = _gradient.GetColor((double)i / _bars.Length);
|
||||
|
||||
@@ -63,7 +63,9 @@
|
||||
</Style>
|
||||
|
||||
<DataTemplate DataType="{x:Type visualizationProvider:LevelVisualizationProvider}">
|
||||
<visualization:LevelVisualizer Style="{StaticResource StyleLevelVisualizer}" VisualizationProvider="{Binding}" />
|
||||
<visualization:LevelVisualizer Style="{StaticResource StyleLevelVisualizer}"
|
||||
VisualizationProvider="{Binding}"
|
||||
VisualizationIndex="{Binding Tag, RelativeSource={RelativeSource AncestorType=ContentControl}}" />
|
||||
</DataTemplate>
|
||||
|
||||
</styles:CachedResourceDictionary>
|
||||
|
||||
@@ -1,17 +1,27 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Threading;
|
||||
using KeyboardAudioVisualizer.AudioProcessing.VisualizationProvider;
|
||||
using KeyboardAudioVisualizer.Helper;
|
||||
using RGB.NET.Brushes.Gradients;
|
||||
using RGB.NET.Core;
|
||||
using Color = System.Windows.Media.Color;
|
||||
using GradientStop = RGB.NET.Brushes.Gradients.GradientStop;
|
||||
using Point = System.Windows.Point;
|
||||
|
||||
namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
{
|
||||
public class LevelVisualizer : Control
|
||||
{
|
||||
#region Properties & Fields
|
||||
|
||||
private LinearGradient _gradient;
|
||||
|
||||
#endregion
|
||||
|
||||
#region DependencyProperties
|
||||
// ReSharper disable InconsistentNaming
|
||||
|
||||
@@ -24,6 +34,15 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
set => SetValue(VisualizationProviderProperty, value);
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty VisualizationIndexProperty = DependencyProperty.Register(
|
||||
"VisualizationIndex", typeof(VisualizationIndex?), typeof(LevelVisualizer), new PropertyMetadata(null, VisualizationIndexChanged));
|
||||
|
||||
public VisualizationIndex? VisualizationIndex
|
||||
{
|
||||
get => (VisualizationIndex?)GetValue(VisualizationIndexProperty);
|
||||
set => SetValue(VisualizationIndexProperty, value);
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty BrushLeftProperty = DependencyProperty.Register(
|
||||
"BrushLeft", typeof(Brush), typeof(LevelVisualizer), new PropertyMetadata(default(Brush)));
|
||||
|
||||
@@ -68,10 +87,6 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
public LevelVisualizer()
|
||||
{
|
||||
RGBSurface.Instance.Updated += args => Dispatcher.BeginInvoke(new Action(Update), DispatcherPriority.Normal);
|
||||
|
||||
//TODO DarthAffe 12.08.2017: Create brush from config
|
||||
BrushLeft = new LinearGradientBrush(Color.FromRgb(255, 0, 0), Color.FromRgb(0, 0, 255), new Point(0, 0.5), new Point(1, 0.5));
|
||||
BrushRight = new LinearGradientBrush(Color.FromRgb(0, 0, 255), Color.FromRgb(255, 0, 0), new Point(0, 0.5), new Point(1, 0.5));
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -92,6 +107,38 @@ namespace KeyboardAudioVisualizer.UI.Visualization
|
||||
SizeRight = horizontalSizeRight;
|
||||
}
|
||||
|
||||
private void SetBrushes()
|
||||
{
|
||||
if (_gradient == null) return;
|
||||
|
||||
GradientStopCollection gradientStops = new GradientStopCollection();
|
||||
foreach (GradientStop stop in _gradient.GradientStops)
|
||||
gradientStops.Add(new System.Windows.Media.GradientStop(Color.FromArgb(stop.Color.A, stop.Color.R, stop.Color.G, stop.Color.B), stop.Offset));
|
||||
|
||||
BrushLeft = new LinearGradientBrush(gradientStops, new Point(1, 0.5), new Point(0, 0.5));
|
||||
BrushRight = new LinearGradientBrush(gradientStops, new Point(0, 0.5), new Point(1, 0.5));
|
||||
}
|
||||
|
||||
private static void VisualizationIndexChanged(DependencyObject dependencyObject,
|
||||
DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
|
||||
{
|
||||
if (!(dependencyObject is LevelVisualizer visualizer)) return;
|
||||
visualizer.UpdateGradient();
|
||||
}
|
||||
|
||||
private void UpdateGradient()
|
||||
{
|
||||
void GradientChanged(object sender, EventArgs args) => SetBrushes();
|
||||
if (_gradient != null)
|
||||
_gradient.GradientChanged -= GradientChanged;
|
||||
|
||||
_gradient = VisualizationIndex.HasValue ? ApplicationManager.Instance.Settings[VisualizationIndex.Value].Gradient : null;
|
||||
if (_gradient != null)
|
||||
_gradient.GradientChanged += GradientChanged;
|
||||
|
||||
SetBrushes();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user