libfoksalcommon 1.1.1

foksal common library
Documentation
pub mod config;
pub mod net;
pub mod utils;

use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
use serde::{Deserialize, Serialize};

pub type CommonSample = f32;

pub const AUDIO_BUF_LEN: usize = 8192;

#[derive(Clone, Copy)]
pub struct AudioSpec {
    pub n_channels: usize,
    pub sample_rate: usize,
}

#[derive(Archive, Clone, Default, RkyvDeserialize, RkyvSerialize)]
pub struct AudioChunk {
    pub samples: Vec<CommonSample>,
    pub n_channels: usize,
    pub sample_rate: usize,
    pub is_final: bool,
}

#[derive(Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct RawFilter {
    pub tag: String,
    pub regex: String,
}

impl AudioSpec {
    pub fn new(n_channels: usize, sample_rate: usize) -> Self {
        Self {
            n_channels,
            sample_rate,
        }
    }
}

impl AudioChunk {
    pub fn new(
        samples: Vec<CommonSample>,
        n_channels: usize,
        sample_rate: usize,
        is_final: bool,
    ) -> Self {
        Self {
            samples,
            n_channels,
            sample_rate,
            is_final,
        }
    }

    pub fn slice(&self, start: usize, end: usize) -> Self {
        let end = end.min(self.samples.len() - 1);
        let is_final = end >= self.samples.len() - 1;

        Self {
            samples: self.samples[start..=end].to_vec(),
            n_channels: self.n_channels,
            sample_rate: self.sample_rate,
            is_final,
        }
    }
}