@@ -11,12 +11,16 @@ use crate::ui::widgets::{SliderRange, chip, pick, split, toggle};
1111use crate :: util:: audio:: { Channel , FrequencyScale } ;
1212use crate :: visuals:: options:: { SpectrumDisplayMode , SpectrumWeightingMode as WeightingMode } ;
1313use crate :: visuals:: spectrum:: processor:: {
14- AveragingMode , DEFAULT_SPECTRUM_EXP_FACTOR , DEFAULT_SPECTRUM_PEAK_DECAY , MAX_SPECTRUM_DB_FLOOR ,
15- MAX_SPECTRUM_EXP_FACTOR , MAX_SPECTRUM_PEAK_DECAY , MIN_SPECTRUM_DB_FLOOR ,
16- MIN_SPECTRUM_EXP_FACTOR , MIN_SPECTRUM_PEAK_DECAY ,
14+ AveragingMode , DEFAULT_SPECTRUM_PEAK_DECAY , DEFAULT_SPECTRUM_TIME_CONSTANT ,
15+ MAX_SPECTRUM_DB_FLOOR , MAX_SPECTRUM_PEAK_DECAY , MAX_SPECTRUM_TIME_CONSTANT ,
16+ MIN_SPECTRUM_DB_FLOOR , MIN_SPECTRUM_PEAK_DECAY , MIN_SPECTRUM_TIME_CONSTANT ,
1717} ;
1818
19- const EXP_R : SliderRange = SliderRange :: new ( MIN_SPECTRUM_EXP_FACTOR , MAX_SPECTRUM_EXP_FACTOR , 0.01 ) ;
19+ const TIME_CONSTANT_R : SliderRange = SliderRange :: new (
20+ MIN_SPECTRUM_TIME_CONSTANT ,
21+ MAX_SPECTRUM_TIME_CONSTANT ,
22+ 0.005 ,
23+ ) ;
2024const DECAY_R : SliderRange =
2125 SliderRange :: new ( MIN_SPECTRUM_PEAK_DECAY , MAX_SPECTRUM_PEAK_DECAY , 0.5 ) ;
2226const BARS_R : SliderRange = SliderRange :: new ( 8.0 , 128.0 , 1.0 ) ;
@@ -36,7 +40,7 @@ crate::macros::choice_enum!(pub(in crate::ui) enum FrequencyDirection {
3640
3741struct AveragingControls {
3842 mode : AvgMode ,
39- factor : f32 ,
43+ time_constant : f32 ,
4044 peak_decay : f32 ,
4145}
4246
@@ -61,7 +65,9 @@ settings_messages!(pane, settings, value {
6165 Weighting ( WeightingMode ) => set( & mut settings. weighting_mode, value) ;
6266 SecondaryWeighting ( WeightingMode ) => set( & mut settings. secondary_weighting_mode, value) ;
6367 Averaging ( AvgMode ) => pane. update_avg( |average| set( & mut average. mode, value) ) ;
64- AvgFactor ( f32 ) => pane. update_avg( |average| set_f32( & mut average. factor, value) ) ;
68+ AvgTimeConstant ( f32 ) => {
69+ pane. update_avg( |average| set_f32( & mut average. time_constant, value) )
70+ } ;
6571 PeakDecay ( f32 ) => pane. update_avg( |average| set_f32( & mut average. peak_decay, value) ) ;
6672 ShowGrid ( bool ) => set( & mut settings. show_grid, value) ;
6773 ShowPeakLabel ( bool ) => set( & mut settings. show_peak_label, value) ;
@@ -96,7 +102,8 @@ settings_view! {
96102 ) ;
97103 let averaging = match pane. averaging. mode {
98104 AvgMode :: Exponential => Some ( slider!(
99- "Exp factor" , pane. averaging. factor, EXP_R , AvgFactor , "{:.2}"
105+ "Time constant" , pane. averaging. time_constant, TIME_CONSTANT_R , AvgTimeConstant ,
106+ format!( "{:.0} ms" , pane. averaging. time_constant * 1000.0 )
100107 ) ) ,
101108 AvgMode :: PeakHold => Some ( slider!(
102109 "Peak decay" , pane. averaging. peak_decay, DECAY_R , PeakDecay , "{:.1} dB/s"
@@ -161,7 +168,7 @@ impl Pane {
161168 self . settings . averaging = match self . averaging . mode {
162169 AvgMode :: None => AveragingMode :: None ,
163170 AvgMode :: Exponential => AveragingMode :: Exponential {
164- factor : self . averaging . factor ,
171+ time_constant : self . averaging . time_constant ,
165172 } ,
166173 AvgMode :: PeakHold => AveragingMode :: PeakHold {
167174 decay_per_second : self . averaging . peak_decay ,
@@ -172,18 +179,20 @@ impl Pane {
172179}
173180
174181fn split_averaging ( avg : AveragingMode ) -> AveragingControls {
175- let default_factor = DEFAULT_SPECTRUM_EXP_FACTOR ;
182+ let default_time_constant = DEFAULT_SPECTRUM_TIME_CONSTANT ;
176183 let default_peak_decay = DEFAULT_SPECTRUM_PEAK_DECAY ;
177- let ( mode, factor, peak_decay) = match avg {
178- AveragingMode :: None => ( AvgMode :: None , default_factor, default_peak_decay) ,
179- AveragingMode :: Exponential { factor } => ( AvgMode :: Exponential , factor, default_peak_decay) ,
184+ let ( mode, time_constant, peak_decay) = match avg {
185+ AveragingMode :: None => ( AvgMode :: None , default_time_constant, default_peak_decay) ,
186+ AveragingMode :: Exponential { time_constant } => {
187+ ( AvgMode :: Exponential , time_constant, default_peak_decay)
188+ }
180189 AveragingMode :: PeakHold { decay_per_second } => {
181- ( AvgMode :: PeakHold , default_factor , decay_per_second)
190+ ( AvgMode :: PeakHold , default_time_constant , decay_per_second)
182191 }
183192 } ;
184193 AveragingControls {
185194 mode,
186- factor ,
195+ time_constant ,
187196 peak_decay,
188197 }
189198}
0 commit comments