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>;
    fn decode_codes(&self, codes: &RvqCodes) -> Result<Vec<f32>>;

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

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>>

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>

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>

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>>

Decode then resample the waveform to output_rate.

Source

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

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".

Implementors§