summaryrefslogtreecommitdiff
path: root/audio
diff options
context:
space:
mode:
Diffstat (limited to 'audio')
-rw-r--r--audio/src/data.rs14
-rw-r--r--audio/src/lib.rs4
-rw-r--r--audio/src/program.rs16
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;