use std::sync::{
LazyLock,
atomic::{AtomicU64, AtomicU32, Ordering, AtomicBool},
};
pub static PLAYED_SAMPLES: LazyLock<AtomicU64> = LazyLock::new(|| AtomicU64::new(0));
pub fn reset_played (){
PLAYED_SAMPLES.store(0, Ordering::Relaxed);
}
pub fn add_played(samples: u64) {
PLAYED_SAMPLES.fetch_add(samples, Ordering::Relaxed);
}
pub fn get_played() -> u64 {
PLAYED_SAMPLES.load(Ordering::Relaxed)
}
pub static TOTAL_SAMPLES: LazyLock<AtomicU64> = LazyLock::new(|| AtomicU64::new(0));
pub fn set_total(samples: u64) {
TOTAL_SAMPLES.store(samples, Ordering::Relaxed);
}
pub fn get_total() -> u64 {
TOTAL_SAMPLES.load(Ordering::Relaxed)
}
pub static DECODER_EOF: LazyLock<AtomicBool> = LazyLock::new(|| AtomicBool::new(false));
pub fn get_decoder_eof() -> bool {
DECODER_EOF.load(Ordering::Relaxed)
}
pub fn set_decoder_eof(flag: bool) {
DECODER_EOF.store(flag, Ordering::Relaxed);
}
pub static DECODER_BUSY: LazyLock<AtomicBool> = LazyLock::new(|| AtomicBool::new(false));
pub fn get_decoder_busy() -> bool {
DECODER_BUSY.load(Ordering::Relaxed)
}
pub fn set_decoder_busy(flag: bool) {
DECODER_BUSY.store(flag, Ordering::Relaxed);
}
pub static VOLUME: LazyLock<AtomicU32> = LazyLock::new(|| AtomicU32::new(1.0f32.to_bits()));
pub fn set_volume(volume: f32) {
VOLUME.store(volume.to_bits(), Ordering::Relaxed);
}
pub fn get_volume() -> f32 {
f32::from_bits(VOLUME.load(Ordering::Relaxed))
}