pub struct StreamingResampler { /* private fields */ }Expand description
Stateful streaming resampler that maintains SoX instances across chunks. This is used by AudioPipeline for memory-efficient streaming resampling.
FIX for Defect 33: Pre-allocate all buffers to avoid heap allocation in process_chunk
Implementations§
Source§impl StreamingResampler
impl StreamingResampler
pub fn from_rate(&self) -> u32
pub fn to_rate(&self) -> u32
Sourcepub fn max_output_len_for_input(&self, input_samples: usize) -> usize
pub fn max_output_len_for_input(&self, input_samples: usize) -> usize
Naive ratio upper bound, in interleaved samples, on the output a single
process_chunk_* call can return.
Per-call Soxr output is now capped (via slicing the pre-allocated scratch
to this bound) inside process_chunk_*, so this is a valid single-call
ceiling: any excess input is buffered by Soxr and recovered on later
calls. Callers reserving an output/leftover buffer for one render-loop
input chunk should size it with this method.
Sourcepub fn max_output_samples_per_chunk(&self) -> usize
pub fn max_output_samples_per_chunk(&self) -> usize
Absolute hard upper bound, in interleaved samples, on the output a single
process_chunk_* call can return for this resampler.
This equals the pre-allocated interleaved_output capacity. With per-call
output now capped to the naive ratio bound (see max_output_len_for_input),
max_output_len_for_input is the right size for per-call reserves; this
method remains the absolute ceiling tied to the internal buffer capacity.
pub fn input_frames_for_output_frames(&self, output_frames: usize) -> usize
Sourcepub fn new(
channels: usize,
from_rate: u32,
to_rate: u32,
) -> Result<Self, ResamplerError>
pub fn new( channels: usize, from_rate: u32, to_rate: u32, ) -> Result<Self, ResamplerError>
Create a new streaming resampler with default (linear) phase and High quality
Sourcepub fn with_phase(
channels: usize,
from_rate: u32,
to_rate: u32,
phase: PhaseResponse,
) -> Result<Self, ResamplerError>
pub fn with_phase( channels: usize, from_rate: u32, to_rate: u32, phase: PhaseResponse, ) -> Result<Self, ResamplerError>
Create a new streaming resampler with specified phase response (High quality)
Returns Err if Soxr initialization fails (e.g., invalid sample rates like 0 Hz)
Sourcepub fn with_quality(
channels: usize,
from_rate: u32,
to_rate: u32,
phase: PhaseResponse,
quality: ResampleQuality,
) -> Result<Self, ResamplerError>
pub fn with_quality( channels: usize, from_rate: u32, to_rate: u32, phase: PhaseResponse, quality: ResampleQuality, ) -> Result<Self, ResamplerError>
Create a new streaming resampler with specified phase response and quality level
FIX for Defect 30: Allow quality configuration FIX for Defect 33: Pre-allocate all buffers to avoid heap allocation in process_chunk
Returns Err if Soxr initialization fails (e.g., invalid sample rates like 0 Hz)
Sourcepub fn process_chunk_borrowed<'a>(
&'a mut self,
input: &'a [f64],
) -> ResampleOutput<'a>
pub fn process_chunk_borrowed<'a>( &'a mut self, input: &'a [f64], ) -> ResampleOutput<'a>
Process a chunk of interleaved audio and borrow the resampler-owned output.
Resampling processes only complete input frames; trailing samples where
input.len() % channels != 0 are ignored to preserve existing behavior.
The equal-rate bypass returns the original input slice unchanged.
The borrowed slice remains valid until the next mutable resampler call.
Sourcepub fn process_chunk_append(
&mut self,
input: &[f64],
output: &mut Vec<f64>,
) -> usize
pub fn process_chunk_append( &mut self, input: &[f64], output: &mut Vec<f64>, ) -> usize
Process a chunk and append the result directly to a caller-owned buffer.
Sourcepub fn process_chunk_into(&mut self, input: &[f64], output: &mut [f64]) -> usize
pub fn process_chunk_into(&mut self, input: &[f64], output: &mut [f64]) -> usize
Process a chunk into a pre-allocated output buffer (zero-allocation version)
Returns the number of frames written to output. Output buffer must be large enough: output.len() >= input.len() * to_rate / from_rate + 64
pub fn reset(&mut self)
Sourcepub fn flush_borrowed(&mut self) -> ResampleOutput<'_>
pub fn flush_borrowed(&mut self) -> ResampleOutput<'_>
Flush remaining samples and borrow the resampler-owned interleaved output.
Sourcepub fn flush_into(&mut self, output: &mut Vec<f64>) -> usize
pub fn flush_into(&mut self, output: &mut Vec<f64>) -> usize
Flush any remaining samples directly into a caller-owned output buffer.
Auto Trait Implementations§
impl Freeze for StreamingResampler
impl RefUnwindSafe for StreamingResampler
impl Send for StreamingResampler
impl Sync for StreamingResampler
impl Unpin for StreamingResampler
impl UnsafeUnpin for StreamingResampler
impl UnwindSafe for StreamingResampler
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more