From ee7a35251ef7a24eb4c8d8f892f6a73a8f69f01e Mon Sep 17 00:00:00 2001 From: Eskil Queseth Date: Sat, 19 Jun 2021 16:41:18 +0200 Subject: create callbacks in the right way --- mumd/src/audio/output.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'mumd/src') 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( user_bufs: Arc>, output_volume_receiver: watch::Receiver, user_volumes: Arc>>, + 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( 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), )); } } -- cgit v1.2.1