#![warn(missing_docs)]
pub mod mimi;
use eredu_nn::Tensor;
pub trait AudioTokenizer {
type Tensor: Tensor;
fn config(&self) -> AudioTokenizerConfig;
fn encode(
&mut self,
pcm: &Self::Tensor,
context: &<Self::Tensor as Tensor>::Context,
) -> Result<Self::Tensor, Error>;
fn decode(
&mut self,
codes: &Self::Tensor,
context: &<Self::Tensor as Tensor>::Context,
) -> Result<Self::Tensor, Error>;
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct AudioTokenizerConfig {
pub sample_rate: f64,
pub frame_rate: f64,
pub channels: i32,
pub codebooks: i32,
pub cardinality: i32,
}
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("{0}")]
InvalidShape(String),
#[error(transparent)]
Compute(#[from] eredu_nn::Error),
}