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§
Sourcefn encode_pcm(
&self,
pcm: &[f32],
num_quantizers: Option<usize>,
) -> Result<RvqCodes, Error>
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.
Sourcefn decode_codes(&self, codes: &RvqCodes) -> Result<Vec<f32>, Error>
fn decode_codes(&self, codes: &RvqCodes) -> Result<Vec<f32>, Error>
Decode RVQ codes back to mono PCM at CodecInfo::sample_rate.
Provided Methods§
Sourcefn sample_rate(&self) -> u32
fn sample_rate(&self) -> u32
Convenience: the codec sample rate.
Sourcefn encode_pcm_bitrate(
&self,
pcm: &[f32],
target_bps: f32,
) -> Result<RvqCodes, Error>
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.
Sourcefn encode_pcm_resampled(
&self,
pcm: &[f32],
input_rate: u32,
num_quantizers: Option<usize>,
) -> Result<RvqCodes, Error>
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).
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).
impl AudioCodec for DacCodec
Unified rlx_core::AudioCodec view (see rlx-mimi for the rationale).
Implementors§
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).