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 ringbuf
crate.
Implementations§
Source§impl<T: Sample + Copy> ResamplingCons<T>
impl<T: Sample + Copy> ResamplingCons<T>
Sourcepub fn num_channels(&self) -> NonZeroUsize
pub fn num_channels(&self) -> NonZeroUsize
The number of channels configured for this stream.
Sourcepub fn is_resampling(&self) -> bool
pub fn is_resampling(&self) -> bool
Returns true
if resampling is occurring, false
if the input and output
sample rates match.
Sourcepub fn output_delay_frames(&self) -> usize
pub fn output_delay_frames(&self) -> usize
Get the delay of the internal resampler, reported as a number of output frames (samples in a single channel).
If no resampler is active, then this will return 0
.
Sourcepub fn in_sample_rate(&self) -> NonZeroU32
pub fn in_sample_rate(&self) -> NonZeroU32
The sample rate of the input (producer) stream.
Sourcepub fn out_sample_rate(&self) -> NonZeroU32
pub fn out_sample_rate(&self) -> NonZeroU32
The sample rate of the output (consumer) stream.
Sourcepub fn available_frames(&self) -> usize
pub fn available_frames(&self) -> usize
The number of output frames (samples in a single channel) in this consumer that are currently available to be read.
Sourcepub fn available_seconds(&self) -> f64
pub fn available_seconds(&self) -> f64
The amount of data in seconds that is currently available to read.
Sourcepub fn occupied_seconds(&self) -> f64
pub fn occupied_seconds(&self) -> f64
The amount of data in seconds that is currently occupied in the channel.
This value will be in the range [0.0, ResamplingCons::capacity_seconds()]
.
This can also be used to detect when an extra packet of data should be read or discarded to correct for jitter.
Sourcepub fn occupied_input_frames(&self) -> usize
pub fn occupied_input_frames(&self) -> usize
Returns the number of input frames (samples in a single channel) from the producer (not output frames from this consumer) that are currently occupied in the channel.
Sourcepub fn latency_seconds(&self) -> f64
pub fn latency_seconds(&self) -> f64
The value of ResamplingChannelConfig::latency_seconds
that was passed when
this channel was created.
Sourcepub fn latency_frames(&self) -> usize
pub fn latency_frames(&self) -> usize
The value of ResamplingChannelConfig::latency_seconds
in units of frames
(samples in a single channel).
Sourcepub fn capacity_seconds(&self) -> f64
pub fn capacity_seconds(&self) -> f64
The capacity of the channel in seconds.
Sourcepub fn capacity_frames(&self) -> usize
pub fn capacity_frames(&self) -> usize
The capacity of the channel in input frames (samples in a single channel) from the producer (not output frames from this consumer).
Sourcepub fn discard_input_frames(&mut self, input_frames: usize) -> usize
pub fn discard_input_frames(&mut self, input_frames: usize) -> usize
Discard the given number of input frames (samples in a single channel) from the producer (not output frames from this consumer) from the channel.
This can be used to correct for jitter and avoid excessive overflows and reduce perceived audible glitchiness.
Returns the number of input frames that were discarded.
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 input frames needed to
bring the value back down to ResamplingCons::latency_seconds()
to avoid
excessive overflows and reduce perceived audible glitchiness.
Returns the number of input frames (not output frames) that were discarded.
If threshold_seconds
is less than ResamplingCons::latency_seconds()
,
then this will do nothing.
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.
Sourcepub fn read<Vout: AsMut<[T]>>(
&mut self,
output: &mut [Vout],
range: Range<usize>,
) -> ReadStatus
pub fn read<Vout: AsMut<[T]>>( &mut self, output: &mut [Vout], range: Range<usize>, ) -> ReadStatus
Read from the channel and store the results in the output buffer.
output
- The channels of audio data to write data to.range
- The range in each channel inoutput
to write data to. Data inside this range will be fully filled, and any data outside this range will be untouched.