From c2adfc88f8aeb4bbdb417897b0cbf44b5b9f7b2c Mon Sep 17 00:00:00 2001 From: Eskil Queseth Date: Fri, 12 Feb 2021 00:00:34 +0100 Subject: fix audio buffer overflowing --- mumd/src/audio.rs | 7 +++++-- mumd/src/audio/input.rs | 6 ++++++ mumd/src/state.rs | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/mumd/src/audio.rs b/mumd/src/audio.rs index 598dde6..94b1abd 100644 --- a/mumd/src/audio.rs +++ b/mumd/src/audio.rs @@ -1,7 +1,7 @@ pub mod input; pub mod output; -use crate::audio::output::SaturatingAdd; +use crate::{audio::output::SaturatingAdd, state::StatePhase}; use crate::network::VoiceStreamType; use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; @@ -90,7 +90,7 @@ pub struct Audio { } impl Audio { - pub fn new(input_volume: f32, output_volume: f32) -> Self { + pub fn new(input_volume: f32, output_volume: f32, phase_watcher: watch::Receiver) -> Self { let sample_rate = SampleRate(SAMPLE_RATE); let host = cpal::default_host(); @@ -181,6 +181,7 @@ impl Audio { input::callback::( sample_sender, input_volume_receiver, + phase_watcher, ), err_fn, ), @@ -189,6 +190,7 @@ impl Audio { input::callback::( sample_sender, input_volume_receiver, + phase_watcher, ), err_fn, ), @@ -197,6 +199,7 @@ impl Audio { input::callback::( sample_sender, input_volume_receiver, + phase_watcher, ), err_fn, ), diff --git a/mumd/src/audio/input.rs b/mumd/src/audio/input.rs index deb0fb8..7769ec1 100644 --- a/mumd/src/audio/input.rs +++ b/mumd/src/audio/input.rs @@ -2,11 +2,17 @@ use cpal::{InputCallbackInfo, Sample}; use tokio::sync::watch; use log::*; +use crate::state::StatePhase; + pub fn callback( mut input_sender: futures::channel::mpsc::Sender, input_volume_receiver: watch::Receiver, + phase_watcher: watch::Receiver, ) -> impl FnMut(&[T], &InputCallbackInfo) + Send + 'static { move |data: &[T], _info: &InputCallbackInfo| { + if !matches!(&*phase_watcher.borrow(), StatePhase::Connected(_)) { + return; + } let input_volume = *input_volume_receiver.borrow(); for sample in data .iter() diff --git a/mumd/src/state.rs b/mumd/src/state.rs index 2ed73b2..6f22f54 100644 --- a/mumd/src/state.rs +++ b/mumd/src/state.rs @@ -63,9 +63,11 @@ pub struct State { impl State { pub fn new() -> Self { let config = mumlib::config::read_default_cfg(); + let watcher = watch::channel(StatePhase::Disconnected); let audio = Audio::new( config.audio.input_volume.unwrap_or(1.0), config.audio.output_volume.unwrap_or(1.0), + watcher.1.clone(), ); let mut state = Self { config, -- cgit v1.2.1