aboutsummaryrefslogtreecommitdiffstats
path: root/src/music.rs
diff options
context:
space:
mode:
authorLibravatarLarge Libravatar /dev/urandom <johnfkennedymaili2p>2025-02-15 06:47:25 +0100
committerLibravatarLarge Libravatar /dev/urandom <johnfkennedymaili2p>2025-02-15 06:47:25 +0100
commit58b0d5e534e0ad064de6ecf215c4e256d3dbe90b (patch)
treed4f7f4893229aa8cdc5fd3347c2d0f72f2b8a923 /src/music.rs
parentbdcce2c59b3b1bd8072ebd00901ec0b9ce1969ba (diff)
downloadcosin25-invite-mountainbytes-58b0d5e534e0ad064de6ecf215c4e256d3dbe90b.tar.gz
cosin25-invite-mountainbytes-58b0d5e534e0ad064de6ecf215c4e256d3dbe90b.tar.bz2
cosin25-invite-mountainbytes-58b0d5e534e0ad064de6ecf215c4e256d3dbe90b.tar.lz
cosin25-invite-mountainbytes-58b0d5e534e0ad064de6ecf215c4e256d3dbe90b.zip

feat: More text, looping music optional, additional cosin invite screen

Diffstat (limited to 'src/music.rs')
-rw-r--r--src/music.rs26
1 files changed, 19 insertions, 7 deletions
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<i16>,
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;
+ }
}
}
}