Struct ResamplingProd

Source
pub struct ResamplingProd<T: Sample, const MAX_CHANNELS: usize> { /* 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 rubato and ringbuf crates.

Implementations§

Source§

impl<T: Sample, const MAX_CHANNELS: usize> ResamplingProd<T, MAX_CHANNELS>

Source

pub fn push<Vin: AsRef<[T]>>( &mut self, input: &[Vin], input_range: Range<usize>, ) -> usize

Push the given data in de-interleaved format.

  • input - The input data in de-interleaved format.
  • input_range - The range in each channel in input to read from.

Returns the number of input frames that were pushed to the channel. If this value is less than the size of the range, then it means an underflow has occurred.

This method is realtime-safe.

§Panics

Panics if:

  • input.len() < self.num_channels().
  • The input_range is out of bounds for any of the input channels.
Source

pub fn push_interleaved(&mut self, input: &[T]) -> usize

Push the given data in interleaved format.

Returns the number of input frames that were pushed to the channel. If this value is less than the size of the range, then it means an underflow has occurred.

This method is realtime-safe.

Source

pub fn correct_underflows(&mut self)

If the channel is empty due to an underflow, fill the channel with ResamplingProd::latency_seconds output frames to avoid excessive underflows in the future and reduce the percieved audible glitchiness.

This method is realtime-safe.

Source

pub fn available_frames(&self) -> usize

Returns the number of input frames (samples in a single channel of audio) that are currently available to be pushed to the buffer.

This method is realtime-safe.

Source

pub fn occupied_output_frames(&self) -> usize

The amount of data that is currently present in the channel, in units of output frames (samples in a single channel of audio).

Note, this is the number of frames in the output audio stream, not the input audio stream.

This method is realtime-safe.

Source

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.

Source

pub fn num_channels(&self) -> NonZeroUsize

The number of channels configured for this stream.

This method is realtime-safe.

Source

pub fn in_sample_rate(&self) -> u32

The sample rate of the input stream.

This method is realtime-safe.

Source

pub fn out_sample_rate(&self) -> u32

The sample rate of the output stream.

This method is realtime-safe.

Source

pub fn latency_seconds(&self) -> f64

The latency of the channel in units of seconds.

This method is realtime-safe.

Source

pub fn is_resampling(&self) -> bool

Returns true if this channel is currently resampling.

This method is realtime-safe.

Source

pub fn reset(&mut self)

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

This method is realtime-safe.

Auto Trait Implementations§

§

impl<T, const MAX_CHANNELS: usize> !Freeze for ResamplingProd<T, MAX_CHANNELS>

§

impl<T, const MAX_CHANNELS: usize> !RefUnwindSafe for ResamplingProd<T, MAX_CHANNELS>

§

impl<T, const MAX_CHANNELS: usize> Send for ResamplingProd<T, MAX_CHANNELS>

§

impl<T, const MAX_CHANNELS: usize> !Sync for ResamplingProd<T, MAX_CHANNELS>

§

impl<T, const MAX_CHANNELS: usize> Unpin for ResamplingProd<T, MAX_CHANNELS>
where T: Unpin,

§

impl<T, const MAX_CHANNELS: usize> !UnwindSafe for ResamplingProd<T, MAX_CHANNELS>

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.