fix: 🐛 system level audio buffer overflow while stopping
This commit is contained in:
parent
6dbfd57072
commit
14c84d2f40
3 changed files with 16 additions and 37 deletions
|
@ -239,12 +239,12 @@ impl Streamer {
|
|||
.metadata()
|
||||
.unwrap()
|
||||
.len() as usize
|
||||
* 4,
|
||||
* 1,
|
||||
)
|
||||
.0,
|
||||
);
|
||||
|
||||
///////TEST İÇİN YANLIŞ VERDİM UNUTMA
|
||||
///////Don't Forget it's for testing
|
||||
let audio_stream_sender = self.data_channel.microphone_stream_sender.clone();
|
||||
let playing_to_base_sender =
|
||||
self.communication_channel.playing_to_base_sender.clone();
|
||||
|
@ -298,8 +298,6 @@ impl Streamer {
|
|||
println!("Stop Audio");
|
||||
self.gui_status.are_we_play_audio = Condition::Loading;
|
||||
|
||||
let decoded_to_playing_sender =
|
||||
self.audio_file.decoded_to_playing_sender.clone().unwrap();
|
||||
let playing_to_base_receiver = self
|
||||
.communication_channel
|
||||
.playing_to_base_sender
|
||||
|
@ -310,7 +308,6 @@ impl Streamer {
|
|||
Command::perform(
|
||||
async move {
|
||||
gui_utils::stop_playing(
|
||||
decoded_to_playing_sender,
|
||||
playing_to_base_receiver,
|
||||
base_to_playing_sender,
|
||||
)
|
||||
|
@ -496,7 +493,6 @@ impl Streamer {
|
|||
base_to_streaming_sender: Sender<bool>,
|
||||
recording_to_base_receiver: Receiver<bool>,
|
||||
base_to_recording_sender: Sender<bool>,
|
||||
decoded_to_playing_sender: Sender<f32>,
|
||||
playing_to_base_receiver: Receiver<bool>,
|
||||
base_to_playing_sender: Sender<bool>,
|
||||
features_in_need: Features,
|
||||
|
@ -513,12 +509,7 @@ impl Streamer {
|
|||
.await;
|
||||
}
|
||||
if features_in_need.play_audio {
|
||||
gui_utils::stop_playing(
|
||||
decoded_to_playing_sender,
|
||||
playing_to_base_receiver,
|
||||
base_to_playing_sender,
|
||||
)
|
||||
.await;
|
||||
gui_utils::stop_playing(playing_to_base_receiver, base_to_playing_sender).await;
|
||||
}
|
||||
Event::CloseWindow(window_id)
|
||||
},
|
||||
|
@ -553,7 +544,6 @@ impl Streamer {
|
|||
.subscribe();
|
||||
let base_to_recording_sender = self.communication_channel.base_to_recording_sender.clone();
|
||||
|
||||
let decoded_to_playing_sender = self.audio_file.decoded_to_playing_sender.clone().unwrap();
|
||||
let playing_to_base_receiver = self
|
||||
.communication_channel
|
||||
.playing_to_base_sender
|
||||
|
@ -565,7 +555,6 @@ impl Streamer {
|
|||
base_to_streaming_sender,
|
||||
recording_to_base_receiver,
|
||||
base_to_recording_sender,
|
||||
decoded_to_playing_sender,
|
||||
playing_to_base_receiver,
|
||||
base_to_playing_sender,
|
||||
features_in_need,
|
||||
|
|
|
@ -100,19 +100,18 @@ pub async fn start_playing(
|
|||
}
|
||||
|
||||
pub async fn stop_playing(
|
||||
decoded_to_playing_sender: Sender<f32>,
|
||||
mut playing_to_base_receiver: Receiver<bool>,
|
||||
base_to_playing_sender: Sender<bool>,
|
||||
) -> State {
|
||||
let thread_solver_task = tokio::spawn(thread_solver(decoded_to_playing_sender));
|
||||
//let thread_solver_task = tokio::spawn(thread_solver(decoded_to_playing_sender));
|
||||
let _ = base_to_playing_sender.send(false);
|
||||
match playing_to_base_receiver.recv().await {
|
||||
Ok(_) => {
|
||||
thread_solver_task.abort();
|
||||
//thread_solver_task.abort();
|
||||
State::StopAudio
|
||||
}
|
||||
Err(err_val) => {
|
||||
thread_solver_task.abort();
|
||||
//thread_solver_task.abort();
|
||||
eprintln!("Error: Communication | {}", err_val);
|
||||
State::PlayingAudio
|
||||
}
|
||||
|
@ -128,17 +127,6 @@ pub async fn is_playing_finished(
|
|||
while decoded_to_playing_sender.len() > 0 {
|
||||
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||
}
|
||||
stop_playing(
|
||||
decoded_to_playing_sender,
|
||||
playing_to_base_receiver,
|
||||
base_to_playing_sender,
|
||||
)
|
||||
.await;
|
||||
stop_playing(playing_to_base_receiver, base_to_playing_sender).await;
|
||||
State::StopAudio
|
||||
}
|
||||
|
||||
async fn thread_solver(decoded_to_playing_sender: Sender<f32>) {
|
||||
loop {
|
||||
let _ = decoded_to_playing_sender.send(0.0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,14 +46,16 @@ pub async fn play(
|
|||
|
||||
let output_data_fn = move |data: &mut [f32], _: &cpal::OutputCallbackInfo| {
|
||||
for sample in data {
|
||||
let single = match decoded_to_playing_receiver.blocking_recv() {
|
||||
Ok(single) => single,
|
||||
Err(_) => 0.0,
|
||||
};
|
||||
if audio_stream_sender.receiver_count() > 0 {
|
||||
let _ = audio_stream_sender.send(single);
|
||||
if decoded_to_playing_receiver.len() > 0 {
|
||||
let single = match decoded_to_playing_receiver.blocking_recv() {
|
||||
Ok(single) => single,
|
||||
Err(_) => 0.0,
|
||||
};
|
||||
if audio_stream_sender.receiver_count() > 0 {
|
||||
let _ = audio_stream_sender.send(single);
|
||||
}
|
||||
*sample = single;
|
||||
}
|
||||
*sample = single;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue