summaryrefslogtreecommitdiff
path: root/graphics/src/audio/data.rs
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/src/audio/data.rs')
-rw-r--r--graphics/src/audio/data.rs82
1 files changed, 23 insertions, 59 deletions
diff --git a/graphics/src/audio/data.rs b/graphics/src/audio/data.rs
index 8ed95bb..9c68523 100644
--- a/graphics/src/audio/data.rs
+++ b/graphics/src/audio/data.rs
@@ -1,66 +1,30 @@
-use crate::audio::{parse, program::Program};
+use crate::audio::program::Program;
+use std::fs;
-const MELODY: &str = r#"
-; setup
-a v100 d50
-P4
-
-%define notes
-a p$1 v100 - a v0 -
-a p$1 v100 - a v0 -
-a pd4 v100 -- a v0 --
-a pa4 v100 -- a v0 -- --
-a pg3# v100 - a v0 - --
-a pg3 v100 - a v0 - --
-a pf3 v100 --- a v0 -
-a pd3 v100 - a v0 -
-a pf3 v100 - a v0 -
-a pg3 v100 - a v0 -
-%end
-
-notes d3
-notes c3
-notes b3
-notes b3b
-
-notes d3
-notes c3
-notes b3
-notes b3b
-"#;
-
-const BASE: &str = r#"
--128
-
-; setup
-b v100 d50
-
-%define notes
-b p$1 v100 -- b v0 --
-b p$1 v100 -- b v0 --
-b p$1 v100 - b v0 -
-b p$1 v100 - b v0 - --
-b p$2 v100 - b v0 - --
-b p$2 v100 - b v0 - --
-b p$2 v100 - b v0 -
-b p$2 v100 - b v0 -
-b p$2 v100 -- b v0 --
-%end
-
-notes d2 d2
-notes c2 c2
-notes b2 b2
-notes b2 c2
-"#;
+macro_rules! load_asm {
+ ($path:tt) => {{
+ if cfg!(any(feature = "static", target_arch = "wasm32")) {
+ let src = include_str!(concat!("../../../", $path));
+ Program::parse(src, true)?
+ } else {
+ let src = fs::read_to_string($path)?;
+ Program::parse(&src, true)?
+ }
+ }};
+ ($first:tt, $($arg:tt)*) => {
+ load_asm!($first)$(.merge(load_asm!($arg)))*
+ };
+}
pub struct Data {
- pub test: Program,
+ pub megalovania: Program,
}
impl Data {
- pub fn load() -> parse::Result<Self> {
- let melody = Program::parse(MELODY, true)?;
- let base = Program::parse(BASE, true)?;
- let test = melody.merge(base);
- Ok(Self { test })
+ pub fn load() -> crate::Result<Self> {
+ let megalovania = load_asm!(
+ "assets/asm/megalovania_melody.asm",
+ "assets/asm/megalovania_base.asm"
+ );
+ Ok(Self { megalovania })
}
}