diff --git a/src/sound/mod.rs b/src/sound/mod.rs index 256e0c4..7f14071 100644 --- a/src/sound/mod.rs +++ b/src/sound/mod.rs @@ -106,7 +106,10 @@ impl SoundManager { if song_id == 0 { log::info!("Stopping BGM"); + self.prev_song_id = self.current_song_id; self.current_song_id = 0; + + self.tx.send(PlaybackMessage::SaveState)?; self.tx.send(PlaybackMessage::Stop)?; } else if let Some(song_name) = SONGS.get(song_id) { let org = organya::Song::load_from(filesystem::open(ctx, ["/base/Org/", &song_name.to_lowercase(), ".org"].join(""))?)?; @@ -206,6 +209,10 @@ fn run<T>(rx: Receiver<PlaybackMessage>, bank: SoundBank, engine.set_state(saved_state.clone().unwrap(), &bank); saved_state = None; + if state == PlaybackState::Stopped { + engine.set_position(0); + } + for i in &mut buf[0..frames] { *i = 0x8080 }; frames = engine.render_to(&mut buf); index = 0;