Struct bevy::audio::Audio

pub struct Audio<Source = AudioSource>where
    Source: Asset + Decodable,{ /* private fields */ }
Expand description

Use this Resource to play audio.

fn play_audio_system(asset_server: Res<AssetServer>, audio: Res<Audio>) {
    audio.play(asset_server.load("my_sound.ogg"));
}

Implementations§

§

impl<Source> Audio<Source>where Source: Asset + Decodable,

pub fn play(&self, audio_source: Handle<Source>) -> Handle<AudioSink>

Play audio from a Handle to the audio source

fn play_audio_system(asset_server: Res<AssetServer>, audio: Res<Audio>) {
    audio.play(asset_server.load("my_sound.ogg"));
}

Returns a weak Handle to the AudioSink. If this handle isn’t changed to a strong one, the sink will be detached and the sound will continue playing. Changing it to a strong handle allows you to control the playback through the AudioSink asset.

fn play_audio_system(
    asset_server: Res<AssetServer>,
    audio: Res<Audio>,
    audio_sinks: Res<Assets<AudioSink>>,
) {
    // This is a weak handle, and can't be used to control playback.
    let weak_handle = audio.play(asset_server.load("my_sound.ogg"));
    // This is now a strong handle, and can be used to control playback.
    let strong_handle = audio_sinks.get_handle(weak_handle);
}

pub fn play_with_settings( &self, audio_source: Handle<Source>, settings: PlaybackSettings ) -> Handle<AudioSink>

Play audio from a Handle to the audio source with PlaybackSettings that allows looping or changing volume from the start.

fn play_audio_system(asset_server: Res<AssetServer>, audio: Res<Audio>) {
    audio.play_with_settings(
        asset_server.load("my_sound.ogg"),
        PlaybackSettings::LOOP.with_volume(0.75),
    );
}

See Self::play on how to control playback once it’s started.

pub fn play_spatial( &self, audio_source: Handle<Source>, listener: Transform, gap: f32, emitter: Vec3 ) -> Handle<SpatialAudioSink>

Play audio from a Handle to the audio source, placing the listener at the given transform, an ear on each side separated by gap. The audio emitter will placed at emitter.

bevy_audio is not using HRTF for spatial audio, but is transforming the sound to a mono track, and then changing the level of each stereo channel according to the distance between the emitter and each ear by amplifying the difference between what the two ears hear.

fn play_spatial_audio_system(asset_server: Res<AssetServer>, audio: Res<Audio>) {
    // Sound will be to the left and behind the listener
    audio.play_spatial(
        asset_server.load("my_sound.ogg"),
        Transform::IDENTITY,
        1.0,
        Vec3::new(-2.0, 0.0, 1.0),
    );
}

Returns a weak Handle to the SpatialAudioSink. If this handle isn’t changed to a strong one, the sink will be detached and the sound will continue playing. Changing it to a strong handle allows you to control the playback, or move the listener and emitter through the SpatialAudioSink asset.

fn play_spatial_audio_system(
    asset_server: Res<AssetServer>,
    audio: Res<Audio>,
    spatial_audio_sinks: Res<Assets<SpatialAudioSink>>,
) {
    // This is a weak handle, and can't be used to control playback.
    let weak_handle = audio.play_spatial(
        asset_server.load("my_sound.ogg"),
        Transform::IDENTITY,
        1.0,
        Vec3::new(-2.0, 0.0, 1.0),
    );
    // This is now a strong handle, and can be used to control playback, or move the emitter.
    let strong_handle = spatial_audio_sinks.get_handle(weak_handle);
}

pub fn play_spatial_with_settings( &self, audio_source: Handle<Source>, settings: PlaybackSettings, listener: Transform, gap: f32, emitter: Vec3 ) -> Handle<SpatialAudioSink>

Play spatial audio from a Handle to the audio source with PlaybackSettings that allows looping or changing volume from the start. The listener is placed at the given transform, an ear on each side separated by gap. The audio emitter is placed at emitter.

bevy_audio is not using HRTF for spatial audio, but is transforming the sound to a mono track, and then changing the level of each stereo channel according to the distance between the emitter and each ear by amplifying the difference between what the two ears hear.

fn play_spatial_audio_system(asset_server: Res<AssetServer>, audio: Res<Audio>) {
    audio.play_spatial_with_settings(
        asset_server.load("my_sound.ogg"),
        PlaybackSettings::LOOP.with_volume(0.75),
        Transform::IDENTITY,
        1.0,
        Vec3::new(-2.0, 0.0, 1.0),
    );
}

See Self::play_spatial on how to control playback once it’s started, or how to move the listener or the emitter.

Trait Implementations§

§

impl<Source> Debug for Audio<Source>where Source: Asset + Decodable,

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<Source> Default for Audio<Source>where Source: Asset + Decodable,

§

fn default() -> Audio<Source>

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

impl<Source> Resource for Audio<Source>where Source: Asset + Decodable, Audio<Source>: Send + Sync + 'static,

Auto Trait Implementations§

§

impl<Source = AudioSource> !RefUnwindSafe for Audio<Source>

§

impl<Source> Send for Audio<Source>

§

impl<Source> Sync for Audio<Source>

§

impl<Source> Unpin for Audio<Source>

§

impl<Source> UnwindSafe for Audio<Source>

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T, U> AsBindGroupShaderType<U> for Twhere U: ShaderType, &'a T: for<'a> Into<U>,

§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for Twhere T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

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

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

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

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

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

impl<T> DowncastSync for Twhere T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync + 'static>

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

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

§

impl<T> FromWorld for Twhere T: Default,

§

fn from_world(_world: &mut World) -> T

Creates Self using data from the given World
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 Twhere U: From<T>,

const: unstable · 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.

§

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

§

fn to_sample_(self) -> U

source§

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

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
§

impl<T> Upcast<T> for T

§

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
§

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

§

impl<T> Event for Twhere T: Send + Sync + 'static,