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§
Sourcefn encode_pcm(
&self,
pcm: &[f32],
num_quantizers: Option<usize>,
) -> Result<RvqCodes>
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.
Sourcefn decode_codes(&self, codes: &RvqCodes) -> Result<Vec<f32>>
fn decode_codes(&self, codes: &RvqCodes) -> Result<Vec<f32>>
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>
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.
Sourcefn encode_pcm_resampled(
&self,
pcm: &[f32],
input_rate: u32,
num_quantizers: Option<usize>,
) -> Result<RvqCodes>
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).
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".