diff options
| author | Eskil <eskilq@kth.se> | 2020-11-06 22:00:24 +0100 |
|---|---|---|
| committer | Eskil <eskilq@kth.se> | 2020-11-06 22:00:24 +0100 |
| commit | 1b3bcebc895bfa4b6f65697fafc31d482c74b2de (patch) | |
| tree | 8f3e8fa198747aa260128951eccd54994ca1fdb5 /mumd/src/audio | |
| parent | d6496cb0f6abba855b04338fa8bc5aaa89487c29 (diff) | |
| parent | 0220f0372937ed179aa84fa6e2250933cd3e3896 (diff) | |
| download | mum-1b3bcebc895bfa4b6f65697fafc31d482c74b2de.tar.gz | |
Merge branch 'mute' into 'main'
Mute
Closes #43
See merge request gustav/mum!29
Diffstat (limited to 'mumd/src/audio')
| -rw-r--r-- | mumd/src/audio/output.rs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/mumd/src/audio/output.rs b/mumd/src/audio/output.rs index 56da596..ce116a8 100644 --- a/mumd/src/audio/output.rs +++ b/mumd/src/audio/output.rs @@ -74,7 +74,7 @@ impl SaturatingAdd for u16 { pub fn curry_callback<T: Sample + AddAssign + SaturatingAdd>( buf: Arc<Mutex<HashMap<u32, ClientStream>>>, output_volume_receiver: watch::Receiver<f32>, - user_volumes: Arc<Mutex<HashMap<u32, f32>>>, + user_volumes: Arc<Mutex<HashMap<u32, (f32, bool)>>>, ) -> impl FnMut(&mut [T], &OutputCallbackInfo) + Send + 'static { move |data: &mut [T], _info: &OutputCallbackInfo| { for sample in data.iter_mut() { @@ -85,11 +85,17 @@ pub fn curry_callback<T: Sample + AddAssign + SaturatingAdd>( let mut lock = buf.lock().unwrap(); for (id, client_stream) in &mut *lock { - let user_volume = user_volumes.lock().unwrap().get(id).cloned().unwrap_or(1.0); + let (user_volume, muted) = user_volumes + .lock() + .unwrap() + .get(id) + .cloned() + .unwrap_or((1.0, false)); for sample in data.iter_mut() { - *sample = sample.saturating_add(Sample::from( - &(client_stream.buffer.pop_front().unwrap_or(0.0) * volume * user_volume), - )); + let s = client_stream.buffer.pop_front().unwrap_or(0.0) * volume * user_volume; + if !muted { + *sample = sample.saturating_add(Sample::from(&s)); + } } } } |
