Skip to main content

AudioCodec

Trait AudioCodec 

Source
pub trait AudioCodec {
    // Required methods
    fn info(&self) -> CodecInfo;
    fn device(&self) -> Device;
    fn encode_pcm(
        &self,
        pcm: &[f32],
        num_quantizers: Option<usize>,
    ) -> Result<RvqCodes, Error>;
    fn decode_codes(&self, codes: &RvqCodes) -> Result<Vec<f32>, Error>;

    // Provided methods
    fn sample_rate(&self) -> u32 { ... }
    fn encode_pcm_bitrate(
        &self,
        pcm: &[f32],
        target_bps: f32,
    ) -> Result<RvqCodes, Error> { ... }
    fn encode_pcm_resampled(
        &self,
        pcm: &[f32],
        input_rate: u32,
        num_quantizers: Option<usize>,
    ) -> Result<RvqCodes, Error> { ... }
    fn decode_codes_resampled(
        &self,
        codes: &RvqCodes,
        output_rate: u32,
    ) -> Result<Vec<f32>, Error> { ... }
    fn roundtrip_pcm(
        &self,
        pcm: &[f32],
        num_quantizers: Option<usize>,
    ) -> Result<(RvqCodes, Vec<f32>), Error> { ... }
}
Expand description

A neural audio codec: PCM ⇄ discrete RVQ codes, on a chosen backend.

encode_pcm/decode_codes are whole-clip. The provided methods add bitrate-driven encoding and resampling front-ends on top, so every codec gets consistent --target-bitrate and arbitrary-input-rate behaviour for free.

Required Methods§

Source

fn info(&self) -> CodecInfo

Static metadata (rate, framing, codebooks).

Source

fn device(&self) -> Device

Backend this codec executes on.

Source

fn encode_pcm( &self, pcm: &[f32], num_quantizers: Option<usize>, ) -> Result<RvqCodes, Error>

Encode mono PCM (at CodecInfo::sample_rate) to RVQ codes. None uses the codec’s full quantizer count.

Source

fn decode_codes(&self, codes: &RvqCodes) -> Result<Vec<f32>, Error>

Decode RVQ codes back to mono PCM at CodecInfo::sample_rate.

Provided Methods§

Source

fn sample_rate(&self) -> u32

Convenience: the codec sample rate.

Source

fn encode_pcm_bitrate( &self, pcm: &[f32], target_bps: f32, ) -> Result<RvqCodes, Error>

Encode at a target bitrate (bits/sec) rather than an explicit quantizer count — the codec maps the bitrate to codebooks via CodecInfo.

Source

fn encode_pcm_resampled( &self, pcm: &[f32], input_rate: u32, num_quantizers: Option<usize>, ) -> Result<RvqCodes, Error>

Encode PCM that arrives at input_rate, resampling to the codec rate first (shared linear resampler).

Source

fn decode_codes_resampled( &self, codes: &RvqCodes, output_rate: u32, ) -> Result<Vec<f32>, Error>

Decode then resample the waveform to output_rate.

Source

fn roundtrip_pcm( &self, pcm: &[f32], num_quantizers: Option<usize>, ) -> Result<(RvqCodes, Vec<f32>), Error>

Encode then decode, returning both the codes and the reconstruction.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl AudioCodec for DacCodec

Unified rlx_core::AudioCodec view (see rlx-mimi for the rationale).

Source§

fn info(&self) -> CodecInfo

Source§

fn device(&self) -> Device

Source§

fn encode_pcm( &self, pcm: &[f32], num_quantizers: Option<usize>, ) -> Result<RvqCodes, Error>

Source§

fn decode_codes(&self, codes: &RvqCodes) -> Result<Vec<f32>, Error>

Implementors§

Source§

impl AudioCodec for MimiCodec

Unified rlx_core::AudioCodec view so TTS/ASR consumers can use Mimi interchangeably with other codecs (bitrate control + resampling for free).