Struct ResamplingProd

Source
pub struct ResamplingProd<T: Sample> { /* 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 ringbuf crate.

Implementations§

Source§

impl<T: Sample> ResamplingProd<T>

Source

pub fn push(&mut self, data: &[T]) -> usize

Push the given data in interleaved format.

Returns the number of frames (not samples) that were successfully pushed. If this number is less than the number of frames in data, then it means an overflow has occured.

Source

pub fn available_frames(&self) -> usize

Returns the number of frames that are currently available to be pushed to the buffer.

Source

pub fn num_channels(&self) -> NonZeroUsize

The number of channels configured for this stream.

Source

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 below a certain threshold, then you can push an extra packet of data 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 out_max_block_frames / out_sample_rate or data_frames / in_sample_rate (whichever is higher) even when the streams are perfectly in sync (data_frames being the typical length in frames of a packet of data pushed to ResamplingProd::push).

Source

pub fn reset(&mut self)

Tell the consumer to clear all queued frames in the buffer.

Auto Trait Implementations§

§

impl<T> !Freeze for ResamplingProd<T>

§

impl<T> !RefUnwindSafe for ResamplingProd<T>

§

impl<T> Send for ResamplingProd<T>

§

impl<T> !Sync for ResamplingProd<T>

§

impl<T> Unpin for ResamplingProd<T>

§

impl<T> UnwindSafe for ResamplingProd<T>
where T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.