diff options
Diffstat (limited to 'audio')
| -rw-r--r-- | audio/src/channel.rs | 5 | ||||
| -rw-r--r-- | audio/src/data.rs | 46 | ||||
| -rw-r--r-- | audio/src/lib.rs | 12 | ||||
| -rw-r--r-- | audio/src/program.rs | 17 |
4 files changed, 18 insertions, 62 deletions
diff --git a/audio/src/channel.rs b/audio/src/channel.rs index 48d416b..b74792e 100644 --- a/audio/src/channel.rs +++ b/audio/src/channel.rs @@ -149,6 +149,11 @@ impl Channels { } } } +impl Default for Channels { + fn default() -> Self { + Self::new() + } +} pub struct Device<'s> { pub channels: Arc<Atomic<Channels>>, diff --git a/audio/src/data.rs b/audio/src/data.rs deleted file mode 100644 index 934e186..0000000 --- a/audio/src/data.rs +++ /dev/null @@ -1,46 +0,0 @@ -use crate::program::Track; -use std::fs; - -macro_rules! load_asm { - ($path:tt) => {{ - let res = if cfg!(any(feature = "static", target_arch = "wasm32")) { - let src = include_str!(concat!("../../", $path)); - Track::parse(src) - } else { - let src = fs::read_to_string($path)?; - Track::parse(&src) - }; - res.map_err(|mut err| { - err.file = Some(String::from($path)); - err - })? - }}; - ($first:tt, $($arg:tt),*) => { - load_asm!($first)$(.merge(load_asm!($arg)))* - }; -} - -pub struct Data { - pub explore: Track, - pub megalovania: Track, - pub test: Track, -} -impl Data { - pub fn load() -> crate::Result<Self> { - let explore = load_asm!( - "assets/asm/explore_melody.asm", - "assets/asm/explore_harmony1.asm", - "assets/asm/explore_harmony2.asm" - ); - let megalovania = load_asm!( - "assets/asm/megalovania_melody.asm", - "assets/asm/megalovania_base.asm" - ); - let test = load_asm!("assets/asm/test.asm"); - Ok(Self { - explore, - megalovania, - test, - }) - } -} diff --git a/audio/src/lib.rs b/audio/src/lib.rs index 814bcd0..8158c35 100644 --- a/audio/src/lib.rs +++ b/audio/src/lib.rs @@ -3,12 +3,12 @@ use raylib::audio::RaylibAudio; use std::{ collections::BinaryHeap, + rc::Rc, sync::atomic::Ordering, time::{Duration, Instant}, }; use channel::Device; -use data::Data; use crate::{ channel::Channels, @@ -16,9 +16,8 @@ use crate::{ }; mod channel; -mod data; mod parse; -mod program; +pub mod program; /// The `Error` type used within this crate pub type Error = Box<dyn std::error::Error>; @@ -36,7 +35,6 @@ pub struct Audio { device: Device<'static>, last: Instant, queue: BinaryHeap<Program>, - pub data: Data, } impl Audio { pub fn load() -> crate::Result<Self> { @@ -53,17 +51,15 @@ impl Audio { let device = Device::load(handle)?; let last = Instant::now(); let queue = BinaryHeap::new(); - let data = Data::load()?; Ok(Self { device, last, queue, - data, }) } - pub fn schedule(&mut self, track: Track, priority: u32, looping: bool) { + pub fn schedule(&mut self, track: Rc<Track>, priority: u32, looping: bool) { let program = Program::new(track, priority, looping); self.queue.push(program); } @@ -86,7 +82,7 @@ impl Audio { res } // make the output quiet! - None => Channels::new(), + None => Channels::default(), }; self.device.channels.store(channels, Ordering::Relaxed); self.last = Instant::now(); diff --git a/audio/src/program.rs b/audio/src/program.rs index b775e24..cd050e3 100644 --- a/audio/src/program.rs +++ b/audio/src/program.rs @@ -52,22 +52,23 @@ use Instruction as I; #[derive(Debug, Clone, PartialEq, Eq)] pub struct Track { - pub ins: Rc<Vec<Instruction>>, + pub ins: Vec<Instruction>, } impl Track { pub fn parse(src: &str) -> parse::Result<Self> { - let ins = Rc::new(parse::parse(src)?); + let ins = parse::parse(src)?; Ok(Self { ins }) } - pub fn merge(self, other: Self) -> Self { + #[must_use] + pub fn merge(&self, other: &Self) -> Self { let mut res = vec![]; let mut l = 0; let mut r = 0; let mut l_pause = 0; let mut r_pause = 0; - let l_ins = self.ins; - let r_ins = other.ins; + let l_ins = &self.ins; + let r_ins = &other.ins; loop { if l >= l_ins.len() && r >= r_ins.len() { @@ -124,7 +125,7 @@ impl Track { } } - Self { ins: Rc::new(res) } + Self { ins: res } } } impl fmt::Display for Track { @@ -141,7 +142,7 @@ impl fmt::Display for Track { #[derive(Debug, Clone, PartialEq, Eq)] pub struct Program { - track: Track, + track: Rc<Track>, priority: u32, looping: bool, pc: usize, @@ -150,7 +151,7 @@ pub struct Program { channels: Channels, } impl Program { - pub const fn new(track: Track, priority: u32, looping: bool) -> Self { + pub const fn new(track: Rc<Track>, priority: u32, looping: bool) -> Self { Self { track, priority, |