Struct ResamplingCons

Source
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>

Source

pub fn num_channels(&self) -> NonZeroUsize

The number of channels configured for this stream.

Source

pub fn is_resampling(&self) -> bool

Returns true if resampling is occurring, false if the input and output sample rates match.

Source

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.

Source

pub fn in_sample_rate(&self) -> NonZeroU32

The sample rate of the input (producer) stream.

Source

pub fn out_sample_rate(&self) -> NonZeroU32

The sample rate of the output (consumer) stream.

Source

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.

Source

pub fn available_seconds(&self) -> f64

The amount of data in seconds that is currently available to read.

Source

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.

Source

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.

Source

pub fn latency_seconds(&self) -> f64

The value of ResamplingChannelConfig::latency_seconds that was passed when this channel was created.

Source

pub fn latency_frames(&self) -> usize

The value of ResamplingChannelConfig::latency_seconds in units of frames (samples in a single channel).

Source

pub fn capacity_seconds(&self) -> f64

The capacity of the channel in seconds.

Source

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).

Source

pub fn reset(&mut self)

Clear all queued frames in the buffer.

Source

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.

Source

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.

Source

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.

Source

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 in output to write data to. Data inside this range will be fully filled, and any data outside this range will be untouched.

Auto Trait Implementations§

§

impl<T> !Freeze for ResamplingCons<T>

§

impl<T> !RefUnwindSafe for ResamplingCons<T>

§

impl<T> Send for ResamplingCons<T>

§

impl<T> !Sync for ResamplingCons<T>

§

impl<T> Unpin for ResamplingCons<T>
where T: Unpin,

§

impl<T> !UnwindSafe for ResamplingCons<T>

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.