From 58b0d5e534e0ad064de6ecf215c4e256d3dbe90b Mon Sep 17 00:00:00 2001 From: /dev/urandom Date: Sat, 15 Feb 2025 06:47:25 +0100 Subject: feat: More text, looping music optional, additional cosin invite screen --- src/music.rs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'src/music.rs') diff --git a/src/music.rs b/src/music.rs index 888de77..7cae5eb 100644 --- a/src/music.rs +++ b/src/music.rs @@ -8,6 +8,7 @@ use crate::vendored::micromod::MmC2r; pub struct Music { pub pcm: Vec, pub offset: usize, + pub playing: bool, } #[cfg(all(feature = "music", not(feature = "32k")))] @@ -15,13 +16,24 @@ impl AudioCallback for Music { type Channel = f32; fn callback(&mut self, out_f: &mut [f32]) { - let len = out_f.len(); - let slice = &self.pcm[self.offset..(self.offset + len).min(self.pcm.len() - 1)]; - let len = slice.len(); - pcm_to_f32pcm(&slice, out_f, len); - self.offset += len; - if self.offset > self.pcm.len() { - self.offset = 0; + if self.playing { + let len = out_f.len(); + let end_of_slice = (self.offset + len).min(self.pcm.len() - 1); + let slice = &self.pcm[self.offset..end_of_slice]; + let len = slice.len(); + pcm_to_f32pcm(&slice, out_f, len); + self.offset += len; + if end_of_slice == self.pcm.len() - 1 { + self.offset = 0; + #[cfg(not(feature = "loop_music"))] + { + self.playing = false; + } + } + } else { + for i in 0..out_f.len() - 1 { + out_f[i] = 0.0; + } } } } -- cgit v1.2.3