aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/audio
diff options
context:
space:
mode:
authorEskil Queseth <eskilq@kth.se>2020-11-05 00:44:04 +0100
committerEskil Queseth <eskilq@kth.se>2020-11-05 00:44:04 +0100
commit22579ced3d1d847a14683fe3b47fa2076df01751 (patch)
tree507d5c8ba721fb31cd58c207be8c0d66e12595c6 /mumd/src/audio
parent4dd73f7b837572211b71483d62bbdfb1227d2aee (diff)
downloadmum-22579ced3d1d847a14683fe3b47fa2076df01751.tar.gz
add mute feature
Diffstat (limited to 'mumd/src/audio')
-rw-r--r--mumd/src/audio/output.rs11
1 files changed, 6 insertions, 5 deletions
diff --git a/mumd/src/audio/output.rs b/mumd/src/audio/output.rs
index 56da596..450bcc8 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,12 @@ 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));
+ }
}
}
}