Struct StaticSoundData
pub struct StaticSoundData {
pub sample_rate: u32,
pub frames: Arc<[Frame]>,
pub settings: StaticSoundSettings,
pub slice: Option<(usize, usize)>,
}
dep_kira
only.Expand description
A piece of audio loaded into memory all at once.
These can be cheaply cloned, as the audio data is shared among all clones.
Fields§
§sample_rate: u32
The sample rate of the audio (in Hz).
frames: Arc<[Frame]>
The raw samples that make up the audio.
settings: StaticSoundSettings
Settings for the sound.
slice: Option<(usize, usize)>
The portion of the sound this StaticSoundData
represents.
Note that the StaticSoundData
holds the entire piece of audio
it was originally given regardless of the value of slice
, but
StaticSoundData::num_frames
, StaticSoundData::duration
,
and StaticSoundData::frame_at_index
will all behave as if
this StaticSoundData
only contained the specified portion of
audio.
Implementations§
§impl StaticSoundData
impl StaticSoundData
pub fn from_file(
path: impl AsRef<Path>,
) -> Result<StaticSoundData, FromFileError> ⓘ
pub fn from_file( path: impl AsRef<Path>, ) -> Result<StaticSoundData, FromFileError> ⓘ
Loads an audio file into a StaticSoundData
.
pub fn from_cursor<T>(
cursor: Cursor<T>,
) -> Result<StaticSoundData, FromFileError> ⓘ
pub fn from_cursor<T>( cursor: Cursor<T>, ) -> Result<StaticSoundData, FromFileError> ⓘ
Loads a cursor wrapping audio file data into a StaticSoundData
.
pub fn from_media_source(
media_source: impl MediaSource + 'static,
) -> Result<StaticSoundData, FromFileError> ⓘ
pub fn from_media_source( media_source: impl MediaSource + 'static, ) -> Result<StaticSoundData, FromFileError> ⓘ
Loads an audio file from a type that implements Symphonia’s MediaSource
trait.
§impl StaticSoundData
impl StaticSoundData
pub fn start_time(&self, start_time: impl Into<StartTime>) -> StaticSoundData
pub fn start_time(&self, start_time: impl Into<StartTime>) -> StaticSoundData
Sets when the sound should start playing.
This returns a cheap clone of the StaticSoundData
with the modified start time.
§Examples
Configuring a sound to start 4 ticks after a clock’s current time:
use kira::{
AudioManager, AudioManagerSettings, DefaultBackend,
sound::static_sound::{StaticSoundData, StaticSoundSettings},
clock::ClockSpeed,
};
let mut manager = AudioManager::<DefaultBackend>::new(AudioManagerSettings::default())?;
let clock_handle = manager.add_clock(ClockSpeed::TicksPerMinute(120.0))?;
let sound = StaticSoundData::from_file("sound.ogg")?
.start_time(clock_handle.time() + 4);
pub fn start_position(
&self,
start_position: impl Into<PlaybackPosition>,
) -> StaticSoundData
pub fn start_position( &self, start_position: impl Into<PlaybackPosition>, ) -> StaticSoundData
Sets where in the sound playback should start.
This returns a cheap clone of the StaticSoundData
with the modified start position.
pub fn reverse(&self, reverse: bool) -> StaticSoundData
pub fn reverse(&self, reverse: bool) -> StaticSoundData
Sets whether the sound should be played in reverse.
This returns a cheap clone of the StaticSoundData
with the modified setting.
pub fn loop_region(
&self,
loop_region: impl IntoOptionalRegion,
) -> StaticSoundData
pub fn loop_region( &self, loop_region: impl IntoOptionalRegion, ) -> StaticSoundData
Sets the portion of the sound that should be looped.
This returns a cheap clone of the StaticSoundData
with the modified loop region.
§Examples
Configure a sound to loop the portion from 3 seconds in to the end:
let settings = StaticSoundSettings::new().loop_region(3.0..);
Configure a sound to loop the portion from 2 to 4 seconds:
let settings = StaticSoundSettings::new().loop_region(2.0..4.0);
pub fn volume(&self, volume: impl Into<Value<Decibels>>) -> StaticSoundData
pub fn volume(&self, volume: impl Into<Value<Decibels>>) -> StaticSoundData
Sets the volume of the sound.
§Examples
Set the volume to a fixed value:
let sound = StaticSoundData::from_file("sound.ogg")?.volume(-6.0);
Link the volume to a modulator:
use kira::{
AudioManager, AudioManagerSettings, DefaultBackend,
modulator::tweener::TweenerBuilder,
sound::static_sound::StaticSoundData,
Value, Mapping, Easing,
Decibels,
};
let mut manager = AudioManager::<DefaultBackend>::new(AudioManagerSettings::default())?;
let tweener = manager.add_modulator(TweenerBuilder {
initial_value: 0.5,
})?;
let sound = StaticSoundData::from_file("sound.ogg")?.volume(Value::FromModulator {
id: tweener.id(),
mapping: Mapping {
input_range: (0.0, 1.0),
output_range: (Decibels::SILENCE, Decibels::IDENTITY),
easing: Easing::Linear,
},
});
pub fn playback_rate(
&self,
playback_rate: impl Into<Value<PlaybackRate>>,
) -> StaticSoundData
pub fn playback_rate( &self, playback_rate: impl Into<Value<PlaybackRate>>, ) -> StaticSoundData
Sets the playback rate of the sound.
Changing the playback rate will change both the speed and the pitch of the sound.
§Examples
Set the playback rate as a factor:
let sound = StaticSoundData::from_file("sound.ogg")?.playback_rate(0.5);
Set the playback rate as a change in semitones:
use kira::Semitones;
let sound = StaticSoundData::from_file("sound.ogg")?.playback_rate(Semitones(-2.0));
Link the playback rate to a modulator:
use kira::{
AudioManager, AudioManagerSettings, DefaultBackend,
modulator::tweener::TweenerBuilder,
sound::static_sound::StaticSoundData,
Value, Easing, Mapping,
PlaybackRate,
};
let mut manager = AudioManager::<DefaultBackend>::new(AudioManagerSettings::default())?;
let tweener = manager.add_modulator(TweenerBuilder {
initial_value: 0.5,
})?;
let sound = StaticSoundData::from_file("sound.ogg")?.playback_rate(Value::FromModulator {
id: tweener.id(),
mapping: Mapping {
input_range: (0.0, 1.0),
output_range: (PlaybackRate(0.0), PlaybackRate(1.0)),
easing: Easing::Linear,
},
});
pub fn panning(&self, panning: impl Into<Value<Panning>>) -> StaticSoundData
pub fn panning(&self, panning: impl Into<Value<Panning>>) -> StaticSoundData
Sets the panning of the sound, where 0 is hard left and 1 is hard right.
§Examples
Set the panning to a fixed value:
let sound = StaticSoundData::from_file("sound.ogg")?.panning(-0.5);
Link the panning to a modulator:
use kira::{
AudioManager, AudioManagerSettings, DefaultBackend,
modulator::tweener::TweenerBuilder,
sound::static_sound::StaticSoundData,
Value, Easing, Mapping,
Panning,
};
let mut manager = AudioManager::<DefaultBackend>::new(AudioManagerSettings::default())?;
let tweener = manager.add_modulator(TweenerBuilder {
initial_value: -0.5,
})?;
let sound = StaticSoundData::from_file("sound.ogg")?.panning(Value::FromModulator {
id: tweener.id(),
mapping: Mapping {
input_range: (-1.0, 1.0),
output_range: (Panning::LEFT, Panning::RIGHT),
easing: Easing::Linear,
},
});
pub fn fade_in_tween(
&self,
fade_in_tween: impl Into<Option<Tween>>,
) -> StaticSoundData
pub fn fade_in_tween( &self, fade_in_tween: impl Into<Option<Tween>>, ) -> StaticSoundData
Sets the tween used to fade in the sound from silence.
This returns a cheap clone of the StaticSoundData
with the modified fade in tween.
pub fn with_settings(&self, settings: StaticSoundSettings) -> StaticSoundData
pub fn with_settings(&self, settings: StaticSoundSettings) -> StaticSoundData
Returns a cheap clone of the StaticSoundData
with the specified settings.
pub fn num_frames(&self) -> usize ⓘ
pub fn num_frames(&self) -> usize ⓘ
Returns the number of frames in the StaticSoundData
.
If StaticSoundData::slice
is Some
, this will be the number
of frames in the slice.
pub fn duration(&self) -> Duration
pub fn duration(&self) -> Duration
Returns the duration of the audio.
If StaticSoundData::slice
is Some
, this will be the duration
of the slice.
pub fn frame_at_index(&self, index: usize) -> Option<Frame> ⓘ
pub fn frame_at_index(&self, index: usize) -> Option<Frame> ⓘ
Returns the nth Frame
of audio in the StaticSoundData
.
If StaticSoundData::slice
is Some
, this will behave as if the StaticSoundData
only contained that portion of the audio.
pub fn slice(&self, region: impl IntoOptionalRegion) -> StaticSoundData
pub fn slice(&self, region: impl IntoOptionalRegion) -> StaticSoundData
Sets the portion of the audio this StaticSoundData
represents.
This returns a cheap clone of the StaticSoundData
with the modified slice.
Note that the StaticSoundData
holds the entire piece of audio it was originally
given regardless of the value of slice
, but StaticSoundData::num_frames
,
StaticSoundData::duration
, and StaticSoundData::frame_at_index
will all behave
as if this StaticSoundData
only contained the specified portion of audio.
§Example
use kira::{
sound::static_sound::{StaticSoundData, StaticSoundSettings},
Frame,
};
let sound = StaticSoundData {
sample_rate: 1,
frames: (0..10).map(|i| Frame::from_mono(i as f32)).collect(),
settings: StaticSoundSettings::default(),
slice: None,
};
let sliced = sound.slice(3.0..6.0);
assert_eq!(sliced.num_frames(), 3);
assert_eq!(sliced.frame_at_index(0), Some(Frame::from_mono(3.0)));
assert_eq!(sliced.frame_at_index(1), Some(Frame::from_mono(4.0)));
Trait Implementations§
§impl Clone for StaticSoundData
impl Clone for StaticSoundData
§fn clone(&self) -> StaticSoundData
fn clone(&self) -> StaticSoundData
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for StaticSoundData
impl Debug for StaticSoundData
§impl PartialEq for StaticSoundData
impl PartialEq for StaticSoundData
§impl SoundData for StaticSoundData
impl SoundData for StaticSoundData
§type Handle = StaticSoundHandle
type Handle = StaticSoundHandle
§fn into_sound(
self,
) -> Result<(Box<dyn Sound>, <StaticSoundData as SoundData>::Handle), <StaticSoundData as SoundData>::Error> ⓘ
fn into_sound( self, ) -> Result<(Box<dyn Sound>, <StaticSoundData as SoundData>::Handle), <StaticSoundData as SoundData>::Error> ⓘ
impl StructuralPartialEq for StaticSoundData
Auto Trait Implementations§
impl Freeze for StaticSoundData
impl RefUnwindSafe for StaticSoundData
impl Send for StaticSoundData
impl Sync for StaticSoundData
impl Unpin for StaticSoundData
impl UnwindSafe for StaticSoundData
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> ByteSized for T
impl<T> ByteSized for T
Source§const BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Source§fn byte_align(&self) -> usize ⓘ
fn byte_align(&self) -> usize ⓘ
Source§fn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Source§impl<T, R> Chain<R> for Twhere
T: ?Sized,
impl<T, R> Chain<R> for Twhere
T: ?Sized,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ExtAny for T
impl<T> ExtAny for T
Source§fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Source§impl<T> ExtMem for Twhere
T: ?Sized,
impl<T> ExtMem for Twhere
T: ?Sized,
Source§const NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Source§fn mem_align_of_val(&self) -> usize ⓘ
fn mem_align_of_val(&self) -> usize ⓘ
Source§fn mem_size_of_val(&self) -> usize ⓘ
fn mem_size_of_val(&self) -> usize ⓘ
Source§fn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true
if dropping values of this type matters. Read moreSource§fn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self
without running its destructor. Read moreSource§fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Source§unsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§fn mem_as_bytes(&self) -> &[u8] ⓘ
fn mem_as_bytes(&self) -> &[u8] ⓘ
unsafe_slice
only.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Hook for T
impl<T> Hook for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out
indicating that a T
is niched.