diff options
| author | Freya Murphy <freya@freyacat.org> | 2025-11-24 11:01:32 -0500 |
|---|---|---|
| committer | Freya Murphy <freya@freyacat.org> | 2025-11-24 11:01:32 -0500 |
| commit | 92bda220d9712628a7db4ea5e86bd170c89a8f43 (patch) | |
| tree | 907596edac04d0f64724d63903e2f498be268714 /audio | |
| parent | audio: add scheduling, and optimize atomic operations (diff) | |
| download | DungeonCrawl-92bda220d9712628a7db4ea5e86bd170c89a8f43.tar.gz DungeonCrawl-92bda220d9712628a7db4ea5e86bd170c89a8f43.tar.bz2 DungeonCrawl-92bda220d9712628a7db4ea5e86bd170c89a8f43.zip | |
audio: move looping to program
Diffstat (limited to 'audio')
| -rw-r--r-- | audio/src/data.rs | 14 | ||||
| -rw-r--r-- | audio/src/lib.rs | 4 | ||||
| -rw-r--r-- | audio/src/program.rs | 16 |
3 files changed, 15 insertions, 19 deletions
diff --git a/audio/src/data.rs b/audio/src/data.rs index f130c2d..934e186 100644 --- a/audio/src/data.rs +++ b/audio/src/data.rs @@ -2,21 +2,21 @@ use crate::program::Track; use std::fs; macro_rules! load_asm { - ($looping:tt, $path:tt) => {{ + ($path:tt) => {{ let res = if cfg!(any(feature = "static", target_arch = "wasm32")) { let src = include_str!(concat!("../../", $path)); - Track::parse(src, $looping) + Track::parse(src) } else { let src = fs::read_to_string($path)?; - Track::parse(&src, $looping) + Track::parse(&src) }; res.map_err(|mut err| { err.file = Some(String::from($path)); err })? }}; - ($looping:tt, $first:tt, $($arg:tt),*) => { - load_asm!($looping, $first)$(.merge(load_asm!($looping, $arg)))* + ($first:tt, $($arg:tt),*) => { + load_asm!($first)$(.merge(load_asm!($arg)))* }; } @@ -28,17 +28,15 @@ pub struct Data { impl Data { pub fn load() -> crate::Result<Self> { let explore = load_asm!( - true, "assets/asm/explore_melody.asm", "assets/asm/explore_harmony1.asm", "assets/asm/explore_harmony2.asm" ); let megalovania = load_asm!( - true, "assets/asm/megalovania_melody.asm", "assets/asm/megalovania_base.asm" ); - let test = load_asm!(false, "assets/asm/test.asm"); + let test = load_asm!("assets/asm/test.asm"); Ok(Self { explore, megalovania, diff --git a/audio/src/lib.rs b/audio/src/lib.rs index 2f0c4ed..814bcd0 100644 --- a/audio/src/lib.rs +++ b/audio/src/lib.rs @@ -63,8 +63,8 @@ impl Audio { }) } - pub fn schedule(&mut self, track: Track, priority: u32) { - let program = Program::new(track, priority); + pub fn schedule(&mut self, track: Track, priority: u32, looping: bool) { + let program = Program::new(track, priority, looping); self.queue.push(program); } diff --git a/audio/src/program.rs b/audio/src/program.rs index c6f048d..b775e24 100644 --- a/audio/src/program.rs +++ b/audio/src/program.rs @@ -53,12 +53,11 @@ use Instruction as I; #[derive(Debug, Clone, PartialEq, Eq)] pub struct Track { pub ins: Rc<Vec<Instruction>>, - pub looping: bool, } impl Track { - pub fn parse(src: &str, looping: bool) -> parse::Result<Self> { + pub fn parse(src: &str) -> parse::Result<Self> { let ins = Rc::new(parse::parse(src)?); - Ok(Self { ins, looping }) + Ok(Self { ins }) } pub fn merge(self, other: Self) -> Self { @@ -125,10 +124,7 @@ impl Track { } } - Self { - ins: Rc::new(res), - looping: self.looping, - } + Self { ins: Rc::new(res) } } } impl fmt::Display for Track { @@ -147,16 +143,18 @@ impl fmt::Display for Track { pub struct Program { track: Track, priority: u32, + looping: bool, pc: usize, pause_cnt: usize, pause_len: usize, channels: Channels, } impl Program { - pub const fn new(track: Track, priority: u32) -> Self { + pub const fn new(track: Track, priority: u32, looping: bool) -> Self { Self { track, priority, + looping, pc: 0, pause_cnt: 0, pause_len: 4, @@ -220,7 +218,7 @@ impl Program { } loop { if self.is_finished() { - if self.track.looping { + if self.looping { self.pc = 0; } else { break; |