@@ -149,8 +149,10 @@ fn afe_worker(afe_handle: Arc<AFE>, tx: MicTx, trigger_mean_value: f32) -> anyho
149149 crate :: print_stack_high ( ) ;
150150 let mut speech = false ;
151151 let mut cache_buffer = Vec :: with_capacity ( 16000 ) ;
152- let mut vol = VOL_NUM . load ( std:: sync:: atomic:: Ordering :: Relaxed ) as f32 / 100.0 ;
153- let mut trigger_mean_value_ = trigger_mean_value * vol;
152+ let mut vol = VOL_NUM . load ( std:: sync:: atomic:: Ordering :: Relaxed ) as i16 ;
153+ let mut trigger_mean_value_ =
154+ trigger_mean_value * ( get_volume ( 100 , vol) as f32 / 100.0 ) . max ( 0.3 ) ;
155+
154156 loop {
155157 let playing = PLAYING . load ( std:: sync:: atomic:: Ordering :: Relaxed ) ;
156158 let result = afe_handle. fetch ( ) ;
@@ -165,8 +167,9 @@ fn afe_worker(afe_handle: Arc<AFE>, tx: MicTx, trigger_mean_value: f32) -> anyho
165167 if result. speech {
166168 if !speech {
167169 log:: info!( "Speech started" ) ;
168- vol = VOL_NUM . load ( std:: sync:: atomic:: Ordering :: Relaxed ) as f32 / 100.0 ;
169- trigger_mean_value_ = trigger_mean_value * vol;
170+ vol = VOL_NUM . load ( std:: sync:: atomic:: Ordering :: Relaxed ) as i16 ;
171+ trigger_mean_value_ =
172+ trigger_mean_value * ( get_volume ( 100 , vol) as f32 / 100.0 ) . max ( 0.3 ) ;
170173 }
171174 speech = true ;
172175 log:: debug!( "Speech detected, sending {} bytes" , result. data. len( ) ) ;
@@ -251,7 +254,7 @@ pub enum AudioEvent {
251254 SpeechChunk ( Vec < u8 > ) ,
252255 SpeechChunki16 ( Vec < i16 > ) ,
253256 EndSpeech ( Arc < tokio:: sync:: Notify > ) ,
254- VolSet ( f32 ) ,
257+ VolSet ( u8 ) ,
255258}
256259
257260enum SendBufferItem {
@@ -263,12 +266,19 @@ struct SendBuffer {
263266 cache : std:: collections:: LinkedList < SendBufferItem > ,
264267 chunk_size : usize ,
265268 pub rest : Vec < i16 > ,
266- pub volume : f32 ,
269+ pub volume : i16 ,
267270}
268271
269272#[ inline]
270- fn get_volume ( value : i16 , volume : f32 ) -> i16 {
271- ( ( value as f32 / i16:: MAX as f32 * volume) * ( i16:: MAX as f32 ) ) as i16
273+ fn get_volume ( value : i16 , volume : i16 ) -> i16 {
274+ match volume {
275+ 0 => 0 ,
276+ 1 => value / 16 ,
277+ 2 => value / 8 ,
278+ 3 => value / 4 ,
279+ 4 => value / 2 ,
280+ _ => value,
281+ }
272282}
273283
274284impl SendBuffer {
@@ -277,7 +287,7 @@ impl SendBuffer {
277287 cache : std:: collections:: LinkedList :: new ( ) ,
278288 chunk_size,
279289 rest : Vec :: new ( ) ,
280- volume : 1.0 ,
290+ volume : 3 ,
281291 }
282292 }
283293
@@ -390,7 +400,7 @@ impl SendBuffer {
390400}
391401
392402static PLAYING : std:: sync:: atomic:: AtomicBool = std:: sync:: atomic:: AtomicBool :: new ( false ) ;
393- static VOL_NUM : std:: sync:: atomic:: AtomicU8 = std:: sync:: atomic:: AtomicU8 :: new ( 50 ) ;
403+ static VOL_NUM : std:: sync:: atomic:: AtomicU8 = std:: sync:: atomic:: AtomicU8 :: new ( 3 ) ;
394404
395405fn audio_task_run (
396406 rx : & mut tokio:: sync:: mpsc:: UnboundedReceiver < AudioEvent > ,
@@ -412,7 +422,7 @@ fn audio_task_run(
412422 let mut allow_speech = false ;
413423 let mut speech = false ;
414424
415- send_buffer. volume = 0.5 ;
425+ send_buffer. volume = 3 ;
416426
417427 loop {
418428 if let Ok ( event) = rx. try_recv ( ) {
@@ -446,8 +456,8 @@ fn audio_task_run(
446456 send_buffer. push_back_end_speech ( sender) ;
447457 }
448458 AudioEvent :: VolSet ( vol) => {
449- send_buffer. volume = vol;
450- VOL_NUM . store ( ( vol * 100.0 ) as u8 , std:: sync:: atomic:: Ordering :: Relaxed ) ;
459+ send_buffer. volume = vol as i16 ;
460+ VOL_NUM . store ( vol, std:: sync:: atomic:: Ordering :: Relaxed ) ;
451461 }
452462 }
453463 }
@@ -662,7 +672,7 @@ impl BoardsAudioWorker {
662672 let afe_handle_ = afe_handle. clone ( ) ;
663673
664674 #[ cfg( feature = "cube2" ) ]
665- const TRIGGER_MEAN_VALUE : f32 = 400 .0;
675+ const TRIGGER_MEAN_VALUE : f32 = 500 .0;
666676 #[ cfg( not( feature = "cube2" ) ) ]
667677 const TRIGGER_MEAN_VALUE : f32 = 300.0 ;
668678
0 commit comments