mod queue_input;
mod queue_output;
mod sound_or_silence;
use std::sync::{Arc, Mutex, atomic::AtomicBool};
pub use queue_input::TTSQueueInput;
pub use queue_output::TTSQueueOutput;
use rodio::Source;
pub use sound_or_silence::SoundOrSilence;
use tokio::sync::mpsc::Sender;
type Signal = Option<Sender<bool>>;
const THRESHOLD: usize = 512;
pub fn queue<T>() -> (Arc<TTSQueueInput<T>>, TTSQueueOutput<T>)
where
T: Source + Send + Clone,
{
let input = Arc::new(TTSQueueInput {
sounds: Mutex::new(Vec::new()),
is_finished: AtomicBool::new(false),
});
let output = TTSQueueOutput::new(input.clone(), 0);
(input, output)
}