aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/audio/output.rs
diff options
context:
space:
mode:
authorEskil <eskilq@kth.se>2020-11-21 15:56:27 +0100
committerEskil <eskilq@kth.se>2020-11-21 15:56:27 +0100
commit08397f89fd6fdefed67533bf9403bde07f1ee40e (patch)
tree731613e6e00d66e7d35e782a1171677388c83306 /mumd/src/audio/output.rs
parentff9a37af7ddf5484bb7db61ae01f8aafd9d1e91d (diff)
parentbe4d273fa8778ec87ad4a34502d0f3c75657fbbc (diff)
downloadmum-08397f89fd6fdefed67533bf9403bde07f1ee40e.tar.gz
Merge branch 'sound-effect' into 'main'
Sound effects on events Closes #68 See merge request gustav/mum!32
Diffstat (limited to 'mumd/src/audio/output.rs')
-rw-r--r--mumd/src/audio/output.rs16
1 files changed, 12 insertions, 4 deletions
diff --git a/mumd/src/audio/output.rs b/mumd/src/audio/output.rs
index ce116a8..5e0cb8d 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,11 @@ 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),
+ ));
+ }
}
}