pub struct ResamplingCons<T: Sample> { /* private fields */ }
Expand description
The consumer 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> ResamplingCons<T>
impl<T: Sample> ResamplingCons<T>
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 latency_frames(&self) -> usize
pub fn latency_frames(&self) -> usize
The latency of the channel in units of output frames.
This method is realtime-safe.
Sourcepub fn available_frames(&self) -> usize
pub fn available_frames(&self) -> usize
The number of frames that are currently available to be read from the channel.
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 is_resampling(&self) -> bool
pub fn is_resampling(&self) -> bool
Returns true
if this channel is currently resampling.
This method is realtime-safe.
Sourcepub fn resampler_output_delay(&self) -> usize
pub fn resampler_output_delay(&self) -> usize
The delay of the internal resampler in number of output frames (samples in a single channel of audio).
If there is no resampler being used for this channel, then this will return
0
.
This method is realtime-safe.
Sourcepub fn discard_frames(&mut self, frames: usize) -> usize
pub fn discard_frames(&mut self, frames: usize) -> usize
Discard a certian number of output frames from the buffer. This can be used to correct for jitter and avoid excessive overflows and reduce the percieved audible glitchiness.
This will discard frames.min(self.available_frames())
frames.
Returns the number of output frames that were discarded.
This method is realtime-safe.
Sourcepub fn discard_jitter(&mut self, threshold_seconds: f64) -> usize
pub fn discard_jitter(&mut self, threshold_seconds: f64) -> usize
If the value of ResamplingCons::occupied_seconds
is greater than the
given threshold in seconds, then discard the number of frames needed to
bring the occupied value back to ResamplingCons::latency_seconds
to
avoid excessive overflows in the future and reduce the percieved audible
glitchiness.
If threshold_seconds
is less than ResamplingCons::latency_seconds
,
then this will do nothing and return 0.
Returns the number of output frames that were discarded.
This method is realtime-safe.
Sourcepub fn read<Vout: AsMut<[T]>>(
&mut self,
output: &mut [Vout],
output_range: Range<usize>,
) -> ReadStatus
pub fn read<Vout: AsMut<[T]>>( &mut self, output: &mut [Vout], output_range: Range<usize>, ) -> ReadStatus
Read from the channel and store the results in the de-interleaved output buffer.
This method is realtime-safe.
Sourcepub fn read_interleaved(&mut self, output: &mut [T]) -> ReadStatus
pub fn read_interleaved(&mut self, output: &mut [T]) -> ReadStatus
Read from the channel and store the results into the output buffer in interleaved format.
This method is realtime-safe.