@@ -145,16 +145,12 @@ impl LoudnessState {
145145 }
146146
147147 fn visual_params ( & self , bounds : Rectangle ) -> LoudnessParams {
148- let values = self . visible_values ( ) ;
148+ let meters = self . visible_meters ( ) ;
149149 LoudnessParams {
150150 geometry : self . geometry ,
151151 bounds,
152152 bg_color : color_to_rgba ( self . palette [ PAL_BACKGROUND ] ) ,
153- bars : [
154- self . meter_fill ( 0 , self . settings . left_mode , values[ 0 ] ) ,
155- self . meter_fill ( 1 , self . settings . left_mode , values[ 1 ] ) ,
156- self . meter_fill ( 2 , self . settings . right_mode , values[ 2 ] ) ,
157- ] ,
153+ bars : std:: array:: from_fn ( |i| self . meter_fill ( self . peaks [ i] . db , meters[ i] ) ) ,
158154 guide_color : color_to_rgba ( self . palette [ PAL_GUIDE ] ) ,
159155 }
160156 }
@@ -174,33 +170,30 @@ impl LoudnessState {
174170 . unwrap_or ( DB_RANGE . 0 )
175171 }
176172
177- fn visible_values ( & self ) -> [ f32 ; VISIBLE_METER_COUNT ] {
173+ fn visible_meters ( & self ) -> [ ( MeterMode , f32 ) ; VISIBLE_METER_COUNT ] {
174+ let ( left, right) = ( self . settings . left_mode , self . settings . right_mode ) ;
178175 [
179- self . aggregate_channels ( self . settings . left_mode , MeterSide :: Left ) ,
180- self . aggregate_channels ( self . settings . left_mode , MeterSide :: Right ) ,
181- self . aggregate_channels ( self . settings . right_mode , MeterSide :: Both ) ,
176+ ( left , MeterSide :: Left ) ,
177+ ( left , MeterSide :: Right ) ,
178+ ( right , MeterSide :: Both ) ,
182179 ]
180+ . map ( |( mode, side) | ( mode, self . aggregate_channels ( mode, side) ) )
183181 }
184182
185- fn meter_fill ( & self , peak_index : usize , mode : MeterMode , db : f32 ) -> MeterFill {
186- let peak_db = self . peaks [ peak_index] . db ;
183+ fn meter_fill ( & self , peak_db : f32 , ( mode, db) : ( MeterMode , f32 ) ) -> MeterFill {
184+ let thresholds = zone_thresholds ( mode) ;
185+ let colors = & self . palette [ PAL_LOW ..] ;
187186 MeterFill {
188187 db,
189- segments : self . meter_segments ( mode ) ,
188+ segments : std :: array :: from_fn ( |i| ( thresholds [ i ] , color_to_rgba ( colors [ i ] ) ) ) ,
190189 peak : ( peak_db > DB_RANGE . 0 ) . then ( || {
191- let danger = peak_db >= zone_thresholds ( mode ) [ DANGER_THRESHOLD_INDEX ] ;
190+ let danger = peak_db >= thresholds [ DANGER_THRESHOLD_INDEX ] ;
192191 let color = self . palette [ if danger { PAL_DANGER } else { PAL_PEAK } ] ;
193192 ( peak_db, color_to_rgba ( color) )
194193 } ) ,
195194 }
196195 }
197196
198- fn meter_segments ( & self , mode : MeterMode ) -> [ ( f32 , [ f32 ; 4 ] ) ; ZONE_COUNT ] {
199- let [ low, mid, high] = zone_thresholds ( mode) ;
200- let thresholds = [ low, mid, high, DB_RANGE . 1 ] ;
201- std:: array:: from_fn ( |i| ( thresholds[ i] , color_to_rgba ( self . palette [ PAL_LOW + i] ) ) )
202- }
203-
204197 fn refresh_value_label ( & mut self ) {
205198 let mode = self . settings . right_mode ;
206199 let unit = match mode {
@@ -219,8 +212,8 @@ impl LoudnessState {
219212 }
220213
221214 fn update_peak_holds ( & mut self , now : Instant ) {
222- let values = self . visible_values ( ) ;
223- for ( peak, value) in self . peaks . iter_mut ( ) . zip ( values ) {
215+ let meters = self . visible_meters ( ) ;
216+ for ( peak, ( _ , value) ) in self . peaks . iter_mut ( ) . zip ( meters ) {
224217 peak. update ( value. clamp ( DB_RANGE . 0 , DB_RANGE . 1 ) , now) ;
225218 }
226219 }
@@ -254,10 +247,12 @@ fn channel_side(
254247 }
255248}
256249
257- fn zone_thresholds ( mode : MeterMode ) -> [ f32 ; 3 ] {
250+ fn zone_thresholds ( mode : MeterMode ) -> [ f32 ; ZONE_COUNT ] {
258251 match mode {
259- MeterMode :: LufsShortTerm | MeterMode :: LufsMomentary => [ -24.0 , -18.0 , -9.0 ] ,
260- MeterMode :: RmsFast | MeterMode :: RmsSlow | MeterMode :: TruePeak => [ -12.0 , -6.0 , -1.0 ] ,
252+ MeterMode :: LufsShortTerm | MeterMode :: LufsMomentary => [ -24.0 , -18.0 , -9.0 , DB_RANGE . 1 ] ,
253+ MeterMode :: RmsFast | MeterMode :: RmsSlow | MeterMode :: TruePeak => {
254+ [ -12.0 , -6.0 , -1.0 , DB_RANGE . 1 ]
255+ }
261256 }
262257}
263258
0 commit comments