-
-
Notifications
You must be signed in to change notification settings - Fork 83
/
IEqualizer.cs
107 lines (95 loc) · 3.32 KB
/
IEqualizer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using BreadPlayer.Core.Models;
using BreadPlayer.Interfaces;
using System.Collections.ObjectModel;
using System.Linq;
namespace BreadPlayer.Core.Engines.Interfaces
{
public abstract class Equalizer : ObservableObject
{
// Center: Frequency center. 20.0 to 22000.0. Default = 8000.0
// Bandwith: Octave range around the center frequency to filter. 0.2 to 5.0. Default = 1.0
// Gain: Frequency Gain. -30 to +30. Default = 0
public static readonly float[][] EqDefaultValues = {
new[] {32f, 1f, 0f},
new[] {64f, 1f, 0f},
new[] {125f, 1f, 0f},
new[] {250f, 1f, 0f},
new[] {500f, 1f, 0f},
new[] {1000f, 1f, 0f},
new[] {2000f, 1f, 0f},
new[] {4000f, 1f, 0f},
new[] {8000f, 1f, 0f},
new[] {16000f, 1f, 0f }
};
public IEqualizerSettings EqualizerSettings { get; set; }
public ObservableCollection<EqualizerSettings> Presets { get; set; }
private int _selectedPreset = -1;
public int SelectedPreset
{
get => _selectedPreset;
set => Set(ref _selectedPreset, value);
}
public void ChangePreset(int presetIndex)
{
var preset = Presets[presetIndex];
EqualizerSettings = preset;
DeInit();
Init();
SaveEqualizerSettings();
}
ObservableCollection<IEqualizerBand> bands;
public ObservableCollection<IEqualizerBand> Bands
{
get => bands;
set => Set(ref bands, value);
}
private bool _isEnabled;
public bool IsEnabled
{
get => _isEnabled;
set
{
Set(ref _isEnabled, value);
if (value)
{
Init();
}
else
{
SaveEqualizerSettings();
DeInit();
}
}
}
private float _preamp = 1f;
public float Preamp
{
get => _preamp;
set => _preamp = value;
}
public bool IsPreampAvailable { get; set; }
public string Name { get; set; }
public abstract void Init(bool setToDefaultValues = false);
public abstract void DeInit();
public abstract void Dispose();
public void SaveEqualizerSettings()
{
var equalizerSettings = EqualizerSettings;
if (equalizerSettings == null || equalizerSettings.Name == null)
{
equalizerSettings = new EqualizerSettings { Name = Name };
EqualizerSettings = equalizerSettings;
}
equalizerSettings.GainValues = Bands.ToDictionary(b => b.BandCaption, b => b.Gain);
equalizerSettings.IsEnabled = IsEnabled;
InitializeSwitch.EqualizerSettingsHelper.SaveEqualizerSettings(equalizerSettings, 1);
InitializeSwitch.EqualizerSettingsHelper.SaveEqualizerPresets(Presets);
}
public void SetToDefault()
{
DeInit();
Init();
}
public abstract IEqualizerBand GetEqualizerBand(bool isActive, float centerValue, float bandwithValue, float gainValue);
}
}