aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mumd/src/audio.rs7
-rw-r--r--mumd/src/audio/input.rs6
-rw-r--r--mumd/src/state.rs2
3 files changed, 13 insertions, 2 deletions
diff --git a/mumd/src/audio.rs b/mumd/src/audio.rs
index 4fc7965..eee6716 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};
@@ -78,7 +78,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<StatePhase>) -> Self {
let sample_rate = SampleRate(SAMPLE_RATE);
let host = cpal::default_host();
@@ -169,6 +169,7 @@ impl Audio {
input::callback::<f32>(
sample_sender,
input_volume_receiver,
+ phase_watcher,
),
err_fn,
),
@@ -177,6 +178,7 @@ impl Audio {
input::callback::<i16>(
sample_sender,
input_volume_receiver,
+ phase_watcher,
),
err_fn,
),
@@ -185,6 +187,7 @@ impl Audio {
input::callback::<u16>(
sample_sender,
input_volume_receiver,
+ phase_watcher,
),
err_fn,
),
diff --git a/mumd/src/audio/input.rs b/mumd/src/audio/input.rs
index 472c161..176747d 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<T: Sample>(
mut input_sender: futures_channel::mpsc::Sender<f32>,
input_volume_receiver: watch::Receiver<f32>,
+ phase_watcher: watch::Receiver<StatePhase>,
) -> 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,