diff --git a/src/sound.rs b/src/sound.rs index a6b2015..17ec61d 100644 --- a/src/sound.rs +++ b/src/sound.rs @@ -1,5 +1,6 @@ -use std::sync::mpsc; -use std::thread; +use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::{LazyLock, mpsc}; + use std::time::Duration; use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; @@ -12,14 +13,21 @@ const NOTE_2_DURATION_SECS: f32 = 0.25; const TOTAL_CHIME_DURATION_SECS: f32 = NOTE_1_DURATION_SECS + NOTE_2_DURATION_SECS; const CHIME_VOLUME_GAIN: f32 = 0.25; +static SOUND_BUSY: LazyLock = LazyLock::new(|| AtomicBool::new(false)); + pub fn play_notification_sound() { - thread::spawn(move || { - // term bell fallback + if SOUND_BUSY.swap(true, Ordering::AcqRel) { + return; + } + + std::thread::spawn(move || { + // term bell fall back print!("\x07"); let _ = std::io::Write::flush(&mut std::io::stdout()); - let _ = play_audio_chime(); + + SOUND_BUSY.store(false, Ordering::Release); }); }