1- using System ;
1+ using System ;
2+ using System . Linq ;
23using System . Windows . Controls ;
34using System . Windows . Media ;
45using System . Windows . Shapes ;
@@ -47,13 +48,16 @@ double[] barSizes
4748 {
4849 var canvas = Drawable . GetDrawingSurface ( ) ;
4950 var barCount = barSizes . Length ;
50- var barMaxWidth = ( width - ( 2d * Margin ) ) / barCount ;
51+ var showingBarCount = FFTPeakAnalyser . ShowingBarsCount ;
52+ showingBarCount = ( showingBarCount > 0 && ( showingBarCount % 2 ) == 0 ) ? showingBarCount : barCount ;
53+ var showingBarRatio = ( showingBarCount > 0 ) ? barCount / showingBarCount : 1 ;
54+ var barMaxWidth = ( width - ( 2d * Margin ) ) / showingBarCount ;
5155 var barWidth = barMaxWidth * WidthPercent / 100d ;
5256
5357 if ( _bars == null )
5458 {
55- _bars = new Rectangle [ barCount ] ;
56- for ( var i = 0 ; i < barCount ; i ++ )
59+ _bars = new Rectangle [ showingBarCount ] ;
60+ for ( var i = 0 ; i < showingBarCount ; i ++ )
5761 {
5862 var bar = new Rectangle ( ) ;
5963 _bars [ i ] = bar ;
@@ -64,10 +68,24 @@ double[] barSizes
6468
6569 var x = x0 ;
6670
67- for ( var i = 0 ; i < barCount ; i ++ )
71+ for ( var i = 0 ; i < showingBarCount ; i ++ )
6872 {
69- var barHeight = Math . Max ( 0 , barSizes [ i ] * ( height - 2 * Margin ) / 255d ) ;
70- var y_top = y0 + height - 2 * Margin - barHeight ;
73+ double maxValue ;
74+
75+ if ( showingBarRatio > 1 )
76+ {
77+ int startIndex = i * showingBarRatio ;
78+ int endIndex = ( i + 1 ) * showingBarRatio ;
79+
80+ maxValue = barSizes . Skip ( startIndex ) . Take ( endIndex - startIndex ) . Max ( ) ;
81+ }
82+ else
83+ {
84+ maxValue = barSizes [ i ] ;
85+ }
86+
87+ var barHeight = Math . Max ( 0 , maxValue * ( height - 2 * Margin ) / 255d ) ;
88+ var y_top = ( y0 + height - 2 * Margin - barHeight ) ;
7189
7290 var bar = _bars [ i ] ;
7391
0 commit comments