diff options
| author | Eskil Queseth <eskilq@kth.se> | 2021-06-19 16:41:18 +0200 |
|---|---|---|
| committer | Eskil Queseth <eskilq@kth.se> | 2021-06-19 16:41:18 +0200 |
| commit | ee7a35251ef7a24eb4c8d8f892f6a73a8f69f01e (patch) | |
| tree | 58a2c02b4db0a8a96673d05eb4aab6e882afe649 /mumd | |
| parent | ffdcb556f5602ac23c7c7660bb3b034459b3adc0 (diff) | |
| download | mum-ee7a35251ef7a24eb4c8d8f892f6a73a8f69f01e.tar.gz | |
create callbacks in the right way
Diffstat (limited to 'mumd')
| -rw-r--r-- | mumd/src/audio/output.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/mumd/src/audio/output.rs b/mumd/src/audio/output.rs index f313f8f..2177fb2 100644 --- a/mumd/src/audio/output.rs +++ b/mumd/src/audio/output.rs @@ -9,6 +9,7 @@ use dasp_ring_buffer::Bounded; use log::*; use mumble_protocol::voice::VoicePacketPayload; use std::collections::{HashMap, VecDeque}; +use std::iter; use std::ops::AddAssign; use std::sync::{Arc, Mutex}; use tokio::sync::watch; @@ -250,6 +251,7 @@ pub fn callback<T: Sample + AddAssign + SaturatingAdd + std::fmt::Display>( user_bufs: Arc<Mutex<ClientStream>>, output_volume_receiver: watch::Receiver<f32>, user_volumes: Arc<Mutex<HashMap<u32, (f32, bool)>>>, + output_channels: opus::Channels, ) -> impl FnMut(&mut [T], &OutputCallbackInfo) + Send + 'static { move |data: &mut [T], _info: &OutputCallbackInfo| { for sample in data.iter_mut() { @@ -263,9 +265,9 @@ pub fn callback<T: Sample + AddAssign + SaturatingAdd + std::fmt::Display>( for (k, v) in user_bufs.buffer_clients.iter_mut() { let (user_volume, muted) = user_volumes.get(&k.1).cloned().unwrap_or((1.0, false)); if !muted { - for sample in data.iter_mut() { + for (sample, val) in data.iter_mut().zip(v.buf.drain().chain(iter::repeat(0.0))) { *sample = sample.saturating_add(Sample::from( - &(v.buf.pop().unwrap_or(0.0) * volume * user_volume), + &(val * volume * user_volume), )); } } |
