aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/audio/input.rs
diff options
context:
space:
mode:
authorEskil Queseth <eskilq@kth.se>2021-06-12 17:09:15 +0200
committerEskil Queseth <eskilq@kth.se>2021-06-12 17:09:15 +0200
commit09cf98857e39d75ed6034259a6fefe48e5998a71 (patch)
tree4257252308bd81aa596fb54e78cc7ba5c99f88ea /mumd/src/audio/input.rs
parent5b2e2c4e266c61f35f7bcfbc603e02070b54e7d0 (diff)
downloadmum-09cf98857e39d75ed6034259a6fefe48e5998a71.tar.gz
lift inits one level
Diffstat (limited to 'mumd/src/audio/input.rs')
-rw-r--r--mumd/src/audio/input.rs44
1 files changed, 21 insertions, 23 deletions
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<T: Sample>(
mut input_sender: futures_channel::mpsc::Sender<Vec<u8>>,
mut transformers: Vec<Box<dyn Transformer + Send + 'static>>,
- frame_size: u32,
- sample_rate: u32,
- channels: u16,
+ mut opus_encoder: opus::Encoder,
+ buffer_size: usize,
input_volume_receiver: watch::Receiver<f32>,
phase_watcher: watch::Receiver<StatePhase>,
) -> 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::<f32>(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<dyn Transformer + Send + 'static>];
let input_stream = match input_supported_sample_format {
@@ -112,9 +113,8 @@ impl DefaultAudioInputDevice {
callback::<f32>(
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::<i16>(
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::<u16>(
sample_sender,
transformers,
- frame_size,
- SAMPLE_RATE,
- input_config.channels,
+ opus_encoder,
+ buffer_size,
input_volume_receiver,
phase_watcher
),