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> 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.
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(&self) -> usize
pub fn output_delay(&self) -> usize
Get the delay of the internal resampler, reported as a number of output frames.
If no resampler is active, then this will return 0
.
Sourcepub fn available_frames(&self) -> usize
pub fn available_frames(&self) -> usize
The number of frames that are currently available to read from the buffer.
Sourcepub fn jitter_seconds(&self) -> f64
pub fn jitter_seconds(&self) -> f64
An number describing the current amount of jitter in seconds between the
input and output streams. A value of 0.0
means the two channels are
perfectly synced, a value less than 0.0
means the input channel is
slower than the input channel, and a value greater than 0.0
means the
input channel is faster than the output channel.
This value can be used to correct for jitter and avoid underflows/
overflows. For example, if this value goes above a certain threshold,
then you can read an extra packet of data or call
ResamplingCons::discard_frames
or ResamplingCons::discard_jitter
to correct for the jitter.
This number will be in the range [-latency_seconds, capacity_seconds - latency_seconds]
,
where latency_seconds
and capacity_seconds
are the values passed in
ResamplingChannelConfig
when this channel was constructed.
Note, it is typical for the jitter value to be around plus or minus several milliseconds even when the streams are perfectly in sync.
Sourcepub fn discard_frames(&mut self, frames: usize) -> usize
pub fn discard_frames(&mut self, frames: usize) -> usize
Discard a certian number of input frames from the buffer. This can be used to correct for jitter and avoid overflows.
This will discard frames.min(self.available_frames())
frames.
If frames
is None
, then the amount of frames to return the jitter count
to 0.0
will be discarded.
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::jitter_seconds
is greater than the
given threshold in seconds, then discard the number of frames needed to
bring the jitter value back to 0.0
to avoid overflows.
Note, it is typical for the jitter value to be around plus or minus several milliseconds even when the streams are perfectly in sync.
Returns the number of input frames that were discarded.
Sourcepub fn read(&mut self, output: &mut [T]) -> ReadStatus
pub fn read(&mut self, output: &mut [T]) -> ReadStatus
Read from the channel and store the results into the output buffer in interleaved format.