From 09cf98857e39d75ed6034259a6fefe48e5998a71 Mon Sep 17 00:00:00 2001 From: Eskil Queseth Date: Sat, 12 Jun 2021 17:09:15 +0200 Subject: lift inits one level --- mumd/src/audio/input.rs | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) (limited to 'mumd/src/audio') diff --git a/mumd/src/audio/input.rs b/mumd/src/audio/input.rs index 9c2d93c..78a7202 100644 --- a/mumd/src/audio/input.rs +++ b/mumd/src/audio/input.rs @@ -11,23 +11,11 @@ use crate::state::StatePhase; pub fn callback( mut input_sender: futures_channel::mpsc::Sender>, mut transformers: Vec>, - frame_size: u32, - sample_rate: u32, - channels: u16, + mut opus_encoder: opus::Encoder, + buffer_size: usize, input_volume_receiver: watch::Receiver, phase_watcher: watch::Receiver, ) -> impl FnMut(&[T], &InputCallbackInfo) + Send + 'static { - let buffer_size = (sample_rate * frame_size / 400) as usize; - let mut opus_encoder = opus::Encoder::new( - sample_rate, - match channels { - 1 => opus::Channels::Mono, - 2 => opus::Channels::Stereo, - _ => unimplemented!("Only 1 or 2 channels supported, got {}", channels), - }, - opus::Application::Voip, - ) - .unwrap(); let mut buffer = Vec::with_capacity(buffer_size); move |data: &[T], _info: &InputCallbackInfo| { @@ -104,6 +92,19 @@ impl DefaultAudioInputDevice { let (volume_sender, input_volume_receiver) = watch::channel::(input_volume); + let mut opus_encoder = opus::Encoder::new( + sample_rate.0, + match input_config.channels { + 1 => opus::Channels::Mono, + 2 => opus::Channels::Stereo, + _ => unimplemented!("Only 1 or 2 channels supported, got {}", input_config.channels), + }, + opus::Application::Voip, + ) + .unwrap(); + // 4 blocks @ 2.5 ms meaning 10 ms total + let buffer_size = (sample_rate.0 * frame_size / 400) as usize; + let transformers = vec![Box::new(NoiseGate::new(200)) as Box]; let input_stream = match input_supported_sample_format { @@ -112,9 +113,8 @@ impl DefaultAudioInputDevice { callback::( sample_sender, transformers, - frame_size, - SAMPLE_RATE, - input_config.channels, + opus_encoder, + buffer_size, input_volume_receiver, phase_watcher ), @@ -125,9 +125,8 @@ impl DefaultAudioInputDevice { callback::( sample_sender, transformers, - frame_size, - SAMPLE_RATE, - input_config.channels, + opus_encoder, + buffer_size, input_volume_receiver, phase_watcher ), @@ -138,9 +137,8 @@ impl DefaultAudioInputDevice { callback::( sample_sender, transformers, - frame_size, - SAMPLE_RATE, - input_config.channels, + opus_encoder, + buffer_size, input_volume_receiver, phase_watcher ), -- cgit v1.2.1