pub struct StaticSoundData {
pub sample_rate: u32,
pub frames: Arc<[Frame]>,
pub settings: StaticSoundSettings,
pub slice: Option<(usize, usize)>,
}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: u32The sample rate of the audio (in Hz).
frames: Arc<[Frame]>The raw samples that make up the audio.
settings: StaticSoundSettingsSettings 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§
Source§impl StaticSoundData
impl StaticSoundData
Sourcepub 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.
Sourcepub 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.
Sourcepub 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.
Source§impl StaticSoundData
impl StaticSoundData
Sourcepub 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);Sourcepub 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.
Sourcepub 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.
Sourcepub 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);Sourcepub 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,
},
});Sourcepub 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,
},
});Sourcepub 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,
},
});Sourcepub 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.
Sourcepub 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.
Sourcepub 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.
Sourcepub 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.
Sourcepub fn unsliced_duration(&self) -> Duration
pub fn unsliced_duration(&self) -> Duration
Returns the total duration of the audio, regardless of its slice.
Sourcepub 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.
Sourcepub 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§
Source§impl Clone for StaticSoundData
impl Clone for StaticSoundData
Source§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 moreSource§impl Debug for StaticSoundData
impl Debug for StaticSoundData
Source§impl PartialEq for StaticSoundData
impl PartialEq for StaticSoundData
Source§impl SoundData for StaticSoundData
impl SoundData for StaticSoundData
Source§type Handle = StaticSoundHandle
type Handle = StaticSoundHandle
Source§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 UnsafeUnpin for StaticSoundData
impl UnwindSafe for StaticSoundData
Blanket Implementations§
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
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.Source§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.