aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/audio/output.rs
diff options
context:
space:
mode:
authorEskil Queseth <eskilq@kth.se>2020-11-13 23:37:54 +0100
committerEskil Queseth <eskilq@kth.se>2020-11-13 23:37:54 +0100
commit89944f0f56935dfd4c3adca6ff8f1fd52212ee03 (patch)
tree5997ee82d04a185327141300df9a058779efe697 /mumd/src/audio/output.rs
parent0a491a4fa431a29668f3cdf5e28b565f39847aca (diff)
downloadmum-89944f0f56935dfd4c3adca6ff8f1fd52212ee03.tar.gz
add mvp for playing sound when stuff happens
Diffstat (limited to 'mumd/src/audio/output.rs')
-rw-r--r--mumd/src/audio/output.rs14
1 files changed, 10 insertions, 4 deletions
diff --git a/mumd/src/audio/output.rs b/mumd/src/audio/output.rs
index ce116a8..2b58d5b 100644
--- a/mumd/src/audio/output.rs
+++ b/mumd/src/audio/output.rs
@@ -71,8 +71,9 @@ impl SaturatingAdd for u16 {
}
}
-pub fn curry_callback<T: Sample + AddAssign + SaturatingAdd>(
- buf: Arc<Mutex<HashMap<u32, ClientStream>>>,
+pub fn curry_callback<T: Sample + AddAssign + SaturatingAdd + std::fmt::Display>(
+ effect_sound: Arc<Mutex<VecDeque<f32>>>,
+ user_bufs: Arc<Mutex<HashMap<u32, ClientStream>>>,
output_volume_receiver: watch::Receiver<f32>,
user_volumes: Arc<Mutex<HashMap<u32, (f32, bool)>>>,
) -> impl FnMut(&mut [T], &OutputCallbackInfo) + Send + 'static {
@@ -83,8 +84,9 @@ pub fn curry_callback<T: Sample + AddAssign + SaturatingAdd>(
let volume = *output_volume_receiver.borrow();
- let mut lock = buf.lock().unwrap();
- for (id, client_stream) in &mut *lock {
+ let mut effects_sound = effect_sound.lock().unwrap();
+ let mut user_bufs = user_bufs.lock().unwrap();
+ for (id, client_stream) in &mut *user_bufs {
let (user_volume, muted) = user_volumes
.lock()
.unwrap()
@@ -98,5 +100,9 @@ pub fn curry_callback<T: Sample + AddAssign + SaturatingAdd>(
}
}
}
+
+ for sample in data.iter_mut() {
+ *sample = sample.saturating_add(Sample::from(&(effects_sound.pop_front().unwrap_or(0.0) * volume)));
+ }
}
}