diff --git a/src/sources/audio_file/mod.rs b/src/sources/audio_file/mod.rs index 96e99a2..96f0fc1 100644 --- a/src/sources/audio_file/mod.rs +++ b/src/sources/audio_file/mod.rs @@ -107,6 +107,11 @@ pub struct AudioFileSettings { pub start_paused: bool, /// Volume at which the audio will play at. pub volume: f64, + /// The playback rate of the sound. + /// + /// Changing the playback rate changes both the speed and the pitch of the + /// sound. + pub playback_rate: f64, /// Panning (in 0..=1) for the sound, where 0 is hard left, and 1 is hard right. pub panning: f64, /// Optionally loop a region of the sound (given in seconds) @@ -123,6 +128,7 @@ impl Default for AudioFileSettings { Self { start_paused: false, volume: 1.0, + playback_rate: 1.0, panning: 0.5, loop_region: None, play_region: Region::from(..), diff --git a/src/sources/audio_file/source.rs b/src/sources/audio_file/source.rs index cc74873..03d9691 100644 --- a/src/sources/audio_file/source.rs +++ b/src/sources/audio_file/source.rs @@ -53,10 +53,12 @@ impl AudioSource for AudioFile { let settings = (*kira_settings) .output_destination(output_destination) .volume(asset_settings.volume) + .playback_rate(asset_settings.playback_rate) .panning(asset_settings.panning) .loop_region(asset_settings.loop_region) .reverse(asset_settings.reverse) .start_position(asset_settings.play_region.start); + let static_data = StaticSoundData::from_cursor(Cursor::new(data.clone())) .map_err(|err| { PlaySoundError::IntoSoundError(AudioFileError::FromFileError(err)) @@ -81,6 +83,7 @@ impl AudioSource for AudioFile { let settings = (*kira_settings) .output_destination(output_destination) .volume(asset_settings.volume) + .playback_rate(asset_settings.playback_rate) .panning(asset_settings.panning) .loop_region(asset_settings.loop_region); let streaming_sound_data = StreamingSoundData::from_file(path)