pub struct ResamplingProd<T: Sample, const MAX_CHANNELS: usize> { /* private fields */ }
Expand description
The producer end of a realtime-safe spsc channel for sending samples across streams.
If the input and output samples rates differ, then this will automatically resample the input stream to match the output stream. If the sample rates match, then no resampling will occur.
Internally this uses the rubato
and ringbuf
crates.
Implementations§
Source§impl<T: Sample, const MAX_CHANNELS: usize> ResamplingProd<T, MAX_CHANNELS>
impl<T: Sample, const MAX_CHANNELS: usize> ResamplingProd<T, MAX_CHANNELS>
Sourcepub fn push<Vin: AsRef<[T]>>(
&mut self,
input: &[Vin],
input_range: Range<usize>,
) -> usize
pub fn push<Vin: AsRef<[T]>>( &mut self, input: &[Vin], input_range: Range<usize>, ) -> usize
Push the given data in de-interleaved format.
input
- The input data in de-interleaved format.input_range
- The range in each channel ininput
to read from.
Returns the number of input frames that were pushed to the channel. If this value is less than the size of the range, then it means an underflow has occurred.
This method is realtime-safe.
§Panics
Panics if:
input.len() < self.num_channels()
.- The
input_range
is out of bounds for any of the input channels.
Sourcepub fn push_interleaved(&mut self, input: &[T]) -> usize
pub fn push_interleaved(&mut self, input: &[T]) -> usize
Push the given data in interleaved format.
Returns the number of input frames that were pushed to the channel. If this value is less than the size of the range, then it means an underflow has occurred.
This method is realtime-safe.
Sourcepub fn correct_underflows(&mut self)
pub fn correct_underflows(&mut self)
If the channel is empty due to an underflow, fill the channel with
ResamplingProd::latency_seconds
output frames to avoid excessive
underflows in the future and reduce the percieved audible glitchiness.
This method is realtime-safe.
Sourcepub fn available_frames(&self) -> usize
pub fn available_frames(&self) -> usize
Returns the number of input frames (samples in a single channel of audio) that are currently available to be pushed to the buffer.
This method is realtime-safe.
Sourcepub fn occupied_output_frames(&self) -> usize
pub fn occupied_output_frames(&self) -> usize
The amount of data that is currently present in the channel, in units of output frames (samples in a single channel of audio).
Note, this is the number of frames in the output audio stream, not the input audio stream.
This method is realtime-safe.
Sourcepub fn occupied_seconds(&self) -> f64
pub fn occupied_seconds(&self) -> f64
The amount of data that is currently present in the channel, in units of seconds.
This method is realtime-safe.
Sourcepub fn num_channels(&self) -> NonZeroUsize
pub fn num_channels(&self) -> NonZeroUsize
The number of channels configured for this stream.
This method is realtime-safe.
Sourcepub fn in_sample_rate(&self) -> u32
pub fn in_sample_rate(&self) -> u32
The sample rate of the input stream.
This method is realtime-safe.
Sourcepub fn out_sample_rate(&self) -> u32
pub fn out_sample_rate(&self) -> u32
The sample rate of the output stream.
This method is realtime-safe.
Sourcepub fn latency_seconds(&self) -> f64
pub fn latency_seconds(&self) -> f64
The latency of the channel in units of seconds.
This method is realtime-safe.
Sourcepub fn is_resampling(&self) -> bool
pub fn is_resampling(&self) -> bool
Returns true
if this channel is currently resampling.
This method is realtime-safe.