Skip to main content

MixerHandle

Struct MixerHandle 

Source
pub struct MixerHandle { /* private fields */ }
Expand description

A cheaply-cloneable handle for adding or removing an AudioMixer’s input sources while the pipeline is running — the mirror image of crate::elements::TeeHandle: Tee lets you attach/detach outputs from another thread; this lets you attach/detach inputs. Keeps only a Weak reference for the same reason TeeHandle does: retaining a handle after the mixer’s own pipeline finishes must not keep its internal state alive forever, and every operation becomes a harmless no-op once the mixer is gone.

Implementations§

Source§

impl MixerHandle

Source

pub fn add_source(&self, name: impl Into<String>) -> Option<Box<dyn Sink>>

Registers a new input under name and returns a Sink to use as a detached branch terminal. Build and attach it inside that source’s own Pipeline::new wiring closure — a different pipeline/thread than this mixer’s own, which is exactly the point). None once the mixer itself is gone. Calling this again with a name already in use replaces that input outright (whatever it had buffered is dropped) rather than erroring — same “just do what was asked” spirit as HashMap::insert. A sink from the previous registration then becomes inert: its data, Eos, and Stop cannot affect the replacement sharing its name.

The input endpoint appears in the upstream source pipeline’s graph when attached through crate::element::Context::attach. The graph intentionally does not invent a cross-pipeline edge to the mixer.

Source

pub fn mix_format(&self) -> Option<MixFormat>

The format the mix is summed into and emitted at.

None once the mixer is gone.

Source

pub fn set_mix_format(&self, format: MixFormat) -> bool

Changes it, from the next tick.

Returns false for a format nothing could be resampled to, and for a mixer that has already been dropped.

§What moves with it

Every input rebuilds its own resampler when it next pushes — each remembers what its own was built for, so none has to be found and invalidated from here, and an input registered after this call is correct without being told.

AudioMixer::time_base is 1/sample_rate, and the output pts is a running sample count in those units. So changing the rate re-means every timestamp after it, while the ones already downstream were stamped under the old one. Nothing here can repair that: a muxer holding a time base from avformat_write_header will not be told, and an encoder was opened for a channel count.

So this is safe exactly while nothing downstream is reading timestamps — a level meter, an idle mixer — and it is the caller’s to know. In practice: change it between recordings, not during one. The mixer itself keeps running either way, which is the point: its pts stays continuous, and a rate change is not a reason to restart the one element every audio source in the application is registered with.

Source

pub fn remove_source(&self, name: &str)

Drops name’s input immediately, discarding whatever it had buffered — a no-op if name isn’t currently registered, or the mixer is gone.

Source

pub fn source_count(&self) -> usize

Returns the number of inputs currently registered with the live mixer.

Returns zero after the mixer has been dropped.

Trait Implementations§

Source§

impl Clone for MixerHandle

Source§

fn clone(&self) -> MixerHandle

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more