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,
impl<Source> Audio<Source>where Source: Asset + Decodable,
pub fn play(&self, audio_source: Handle<Source>) -> Handle<AudioSink>
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>
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>
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>
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> 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§
§impl<T, U> AsBindGroupShaderType<U> for Twhere
U: ShaderType,
&'a T: for<'a> Into<U>,
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
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere T: Default,
§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given World