voxio 0.1.0

A lightweight TUI music player for local files
Documentation
use crossbeam::queue::ArrayQueue;
use std::sync::Arc;

#[derive(Clone)]
pub struct SampleTap {
    buffer: Arc<ArrayQueue<f32>>,
    capacity: usize,
}

impl SampleTap {
    pub(crate) fn new(capacity: usize) -> Self {
        SampleTap {
            buffer: Arc::new(ArrayQueue::new(capacity)),
            capacity,
        }
    }

    pub(crate) fn push(&self, samples: &[f32]) {
        samples.into_iter().for_each(|&s| {
            let _ = self.buffer.force_push(s);
        });
    }

    pub(crate) fn get_latest(&self, amount: usize) -> Vec<f32> {
        let output_len = amount.min(self.capacity);

        let mut output = Vec::with_capacity(output_len);
        for _ in 0..output_len {
            match self.buffer.pop() {
                Some(s) => output.push(s),
                None => break,
            }
        }

        output
    }
}