Skip to content

Commit

Permalink
Merge pull request #107 from NiklasEi/play_paused_sound
Browse files Browse the repository at this point in the history
Allow playing a paused sound
  • Loading branch information
NiklasEi authored Sep 6, 2023
2 parents 80503eb + 33943c8 commit 9b6bf56
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Changelog

- Multiply instance volume with channel volume ([#103](https://github.com/NiklasEi/bevy_kira_audio/issues/103))
- Allow playing a paused sound using `.play(...).paused()` ([#105](https://github.com/NiklasEi/bevy_kira_audio/issues/105))

## v0.16.0
- Update to Bevy `0.11`
Expand Down
8 changes: 8 additions & 0 deletions src/audio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ pub(crate) struct PartialSoundSettings {
pub(crate) start_position: Option<f64>,
pub(crate) panning: Option<f64>,
pub(crate) reverse: Option<bool>,
pub(crate) paused: bool,
pub(crate) fade_in: Option<AudioTween>,
}

Expand Down Expand Up @@ -194,6 +195,13 @@ impl<'a> PlayAudioCommand<'a> {
self
}

/// Start the sound paused.
pub fn paused(&mut self) -> &mut Self {
self.settings.paused = true;

self
}

/// Loop the playing sound, starting from the given position.
pub fn loop_from(&mut self, loop_start_position: f64) -> &mut Self {
self.settings.loop_start = Some(Some(loop_start_position));
Expand Down
14 changes: 14 additions & 0 deletions src/audio_output.rs
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,9 @@ impl<B: Backend> AudioOutput<B> {
sound.settings.playback_rate = kira::tween::Value::Fixed(PlaybackRate::Factor(0.0));
}
}
if partial_sound_settings.paused {
sound.settings.playback_rate = kira::tween::Value::Fixed(PlaybackRate::Factor(0.0));
}
partial_sound_settings.apply(&mut sound);
let sound_handle = self.manager.as_mut().unwrap().play(sound);
if let Err(error) = sound_handle {
Expand All @@ -257,6 +260,17 @@ impl<B: Backend> AudioOutput<B> {
}
}
}
if partial_sound_settings.paused {
if let Err(error) = sound_handle.pause(kira::tween::Tween::default()) {
warn!("Failed to pause instance due to {:?}", error);
}
let playback_rate = partial_sound_settings.playback_rate.unwrap_or(1.0);
if let Err(error) =
sound_handle.set_playback_rate(playback_rate, kira::tween::Tween::default())
{
error!("Failed to set playback rate for instance: {:?}", error);
}
}
let instance_handle = audio_instances.set(
instance_handle,
AudioInstance {
Expand Down

0 comments on commit 9b6bf56

Please sign in to comment.