Skip to main content

Audio

Struct Audio 

Source
pub struct Audio { /* private fields */ }

Implementations§

Source§

impl Audio

Source

pub fn new() -> Self

Source

pub fn warm(&mut self)

Starts opening the device if nothing has yet. Cheap to call every frame; the driver calls it once the session holds a sound, so the device is open by the time a click asks for one.

Source

pub fn apply( &mut self, cmds: Vec<AudioCommand>, resources: &SharedResources, ) -> Answered

Applies queued commands to the device. While it is still opening they wait, in order, behind whatever waited before. Returns what the device answered back: the stops that landed on a sound still playing and the plays it would not take, the way Self::poll_ended returns the ones that finished. Both are buffered rather than produced inline, because either can happen inside flush_pending, which runs from the poll as well as from here — so a command that waited for the device reports on the apply that flushes it, a later one than the apply that queued it.

Source

pub fn poll_ended(&mut self) -> Vec<PlaybackId>

Playbacks that finished on their own since the last poll (stopped ones were already forgotten by Stop). Also where a command that waited for the device starts, since the driver polls while anything is active.

Source

pub fn holds_device(&self) -> bool

Whether the device is open (or opening) and so costing something. A CoreAudio/WASAPI/ALSA output stream is a real-time thread that runs whether or not anything is playing — 94 buffer callbacks a second at the usual 512-frame period — which is the whole of an idle kui app’s CPU once a session holds a sound. The driver asks so it knows whether there is anything to close.

Source

pub fn close(&mut self)

Lets the output device go. The decoded-sound cache stays — it is the ~90 ms open that has to be paid again, not the decode — so a re-warm costs nothing a cold start does not. Refuses while anything is playing or waiting, since that is the device’s whole job; the driver only asks after active() has been false for a while.

Asks opening() first, and that is not a detail: a device the app warmed but never commanded stays in Opening forever — nothing else on this type calls opening() unless a command flows — with the opened manager sitting live in the channel and its stream running. That is precisely the case worth closing, so the state has to be settled before it can be read. Still opening means not yet closable; the driver asks again.

Source

pub fn active(&self) -> bool

Whether any playback is live, or waiting on the device to open — drivers keep polling while so. Both answer buffers count: a flush_pending from the poll can fill either, and the core only hears them on the next apply.

Source

pub fn env(&self) -> AudioEnv

The reading a view gets (env.audio): the device’s state and the playbacks started or waiting. The two readers above, as data — what the driver decides by is what the view can see.

Trait Implementations§

Source§

impl Default for Audio

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Audio

§

impl !Send for Audio

§

impl !Sync for Audio

§

impl !UnwindSafe for Audio

§

impl Freeze for Audio

§

impl Unpin for Audio

§

impl UnsafeUnpin for Audio

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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

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<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

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<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

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