From 50494d902b18b8de8d5585e67b44c317bd957a4e Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sat, 22 Mar 2014 01:39:18 +0100 Subject: [PATCH] Fix equalizers showing inverted values --- Vocaluxe/Screens/CScreenNames.cs | 2 +- Vocaluxe/Screens/CScreenOptionsRecord.cs | 22 +++++++------ VocaluxeLib/Menu/CEqualizer.cs | 40 ++++++++++++++---------- 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs index f3789e5c..945e6731 100644 --- a/Vocaluxe/Screens/CScreenNames.cs +++ b/Vocaluxe/Screens/CScreenNames.cs @@ -547,7 +547,7 @@ namespace Vocaluxe.Screens for (int i = 1; i <= CGame.NumPlayer; i++) { CRecord.AnalyzeBuffer(i - 1); - _Equalizers["EqualizerPlayer" + i].Update(CRecord.ToneWeigth(i - 1)); + _Equalizers["EqualizerPlayer" + i].Update(CRecord.ToneWeigth(i - 1), CRecord.GetMaxVolume(i - 1)); } return true; } diff --git a/Vocaluxe/Screens/CScreenOptionsRecord.cs b/Vocaluxe/Screens/CScreenOptionsRecord.cs index cd41ebaf..a0c072d6 100644 --- a/Vocaluxe/Screens/CScreenOptionsRecord.cs +++ b/Vocaluxe/Screens/CScreenOptionsRecord.cs @@ -223,25 +223,29 @@ namespace Vocaluxe.Screens if (_CheckMicConfig()) { - _ChannelEnergy[0] = 0f; - int player = _SelectSlides[_SelectSlideRecordChannel1].Selection; - if (player > 0) + int player = _SelectSlides[_SelectSlideRecordChannel1].Selection - 1; + if (player >= 0) { - _ChannelEnergy[0] = CRecord.GetMaxVolume(player - 1); - _Equalizers[_EqualizerChannel1].Update(CRecord.ToneWeigth(player - 1)); + _ChannelEnergy[0] = CRecord.GetMaxVolume(player); + _Equalizers[_EqualizerChannel1].Update(CRecord.ToneWeigth(player), CRecord.GetMaxVolume(player)); } else + { + _ChannelEnergy[0] = 0f; _Equalizers[_EqualizerChannel1].Reset(); + } - _ChannelEnergy[1] = 0f; - player = _SelectSlides[_SelectSlideRecordChannel2].Selection; - if (player > 0) + player = _SelectSlides[_SelectSlideRecordChannel2].Selection - 1; + if (player >= 0) { _ChannelEnergy[1] = CRecord.GetMaxVolume(player - 1); - _Equalizers[_EqualizerChannel2].Update(CRecord.ToneWeigth(player - 1)); + _Equalizers[_EqualizerChannel2].Update(CRecord.ToneWeigth(player), CRecord.GetMaxVolume(player)); } else + { + _ChannelEnergy[1] = 0f; _Equalizers[_EqualizerChannel2].Reset(); + } } else { diff --git a/VocaluxeLib/Menu/CEqualizer.cs b/VocaluxeLib/Menu/CEqualizer.cs index 5d75a478..58680d90 100644 --- a/VocaluxeLib/Menu/CEqualizer.cs +++ b/VocaluxeLib/Menu/CEqualizer.cs @@ -22,7 +22,7 @@ namespace VocaluxeLib.Menu { enum EEqualizerStyle { - Collums + Columns } struct SThemeEqualizer @@ -64,6 +64,8 @@ namespace VocaluxeLib.Menu } private float[] _Bars; + private int _MaxBar; + private float _MaxVolume; public CEqualizer(int partyModeID) { @@ -211,17 +213,31 @@ namespace VocaluxeLib.Menu return false; } - public void Update(float[] weights) + public void Update(float[] weights, float volume) { if (weights == null || weights.Length == 0 || _Bars == null) return; + if (volume < 0.001) + return; + if (volume > _MaxVolume) + _MaxVolume = volume; + _MaxBar = 0; + float maxVal = -99f; for (int i = 0; i < _Bars.Length; i++) { if (weights.Length > i) { - _Bars[i] = 1f - weights[i]; if (_Theme.DrawNegative == EOffOn.TR_CONFIG_OFF && weights[i] < 0) - _Bars[i] = 1f + weights[i]; + _Bars[i] = 0f; + else + { + _Bars[i] = weights[i] * volume / _MaxVolume; + if (_Bars[i] > maxVal) + { + maxVal = _Bars[i]; + _MaxBar = i; + } + } } else _Bars[i] = 0f; @@ -235,30 +251,22 @@ namespace VocaluxeLib.Menu for (int i = 0; i < _Bars.Length; i++) _Bars[i] = 0f; + _MaxBar = 0; + _MaxVolume = 0f; } public void Draw() { - if (_Bars == null || _Theme.Style != EEqualizerStyle.Collums) + if (_Bars == null || _Theme.Style != EEqualizerStyle.Columns) return; float dx = Rect.W / _Bars.Length; - int max = _Bars.Length - 1; - float maxB = _Bars[max]; - for (int i = 0; i < _Bars.Length - 1; i++) - { - if (_Bars[i] > maxB) - { - maxB = _Bars[i]; - max = i; - } - } for (int i = 0; i < _Bars.Length; i++) { var bar = new SRectF(Rect.X + dx * i, Rect.Y + Rect.H - _Bars[i] * Rect.H, dx - Space, _Bars[i] * Rect.H, Rect.Z); SColorF color = Color; - if (i == max) + if (i == _MaxBar) color = MaxColor; CBase.Drawing.DrawColor(color, bar);