Skip to content

Commit 43a249f

Browse files
committed
feat: New volume logic
1 parent bebc0cf commit 43a249f

File tree

2 files changed

+35
-25
lines changed

2 files changed

+35
-25
lines changed

src/app.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ pub async fn main_work<'d>(
181181
let mut metrics = DownloadMetrics::new();
182182
let mut need_compute = true;
183183
let mut speed = 1.5;
184-
let mut vol = 0.5;
184+
let mut vol = 3u8;
185185

186186
let mut hello_wav = Vec::with_capacity(1024 * 30);
187187

@@ -232,27 +232,27 @@ pub async fn main_work<'d>(
232232
gui.display_flush().unwrap();
233233
}
234234
Event::Event(Event::VOL_UP) => {
235-
vol += 0.1;
236-
if vol > 1.0 {
237-
vol = 1.0;
235+
vol += 1;
236+
if vol > 5 {
237+
vol = 5;
238238
}
239239
player_tx
240240
.send(AudioEvent::VolSet(vol))
241241
.map_err(|e| anyhow::anyhow!("Error sending volume set: {e:?}"))?;
242-
log::info!("Volume set to {:.1}", vol);
243-
gui.state = format!("Volume: {:.1}", vol);
242+
log::info!("Volume set to {}", vol);
243+
gui.state = format!("Volume: {}", vol);
244244
gui.display_flush().unwrap();
245245
}
246246
Event::Event(Event::VOL_DOWN) => {
247-
vol -= 0.1;
248-
if vol < 0.1 {
249-
vol = 0.1;
247+
vol -= 1;
248+
if vol < 1 {
249+
vol = 1;
250250
}
251251
player_tx
252252
.send(AudioEvent::VolSet(vol))
253253
.map_err(|e| anyhow::anyhow!("Error sending volume set: {e:?}"))?;
254-
log::info!("Volume set to {:.1}", vol);
255-
gui.state = format!("Volume: {:.1}", vol);
254+
log::info!("Volume set to {}", vol);
255+
gui.state = format!("Volume: {}", vol);
256256
gui.display_flush().unwrap();
257257
}
258258
Event::Event(Event::YES | Event::K1) => {}

src/audio.rs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

257260
enum 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

274284
impl 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

392402
static 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

395405
fn 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

Comments
 (0)