WIP music

This commit is contained in:
Stephen Seo 2023-04-29 17:46:58 +09:00
parent f02b72c57e
commit 94f3cdfa6e
3 changed files with 138 additions and 0 deletions

View file

@ -5,6 +5,7 @@ mod wasm4;
use wasm4::*;
mod helpers;
mod music;
mod sprites;
mod world;

131
src/music.rs Normal file
View file

@ -0,0 +1,131 @@
use crate::wasm4::*;
const C4: u32 = 262;
const D4: u32 = 293;
const E4: u32 = 330;
const F4: u32 = 349;
const G4: u32 = 392;
const A4: u32 = 440;
const B4: u32 = 494;
const C5: u32 = 523;
const D5: u32 = 587;
const E5: u32 = 659;
const F5: u32 = 698;
const G5: u32 = 784;
const A5: u32 = 880;
const B5: u32 = 988;
const C6: u32 = 1047;
pub struct Music {
started: bool,
frame: u32,
}
impl Music {
pub fn new() -> Self {
Self {
started: false,
frame: 0,
}
}
pub fn start(&mut self) {
self.started = true;
}
pub fn update(&mut self) {
if !self.started {
return;
}
// m1
if self.frame == 0 {
tone(G4, 10 << 8, 40, TONE_PULSE1);
tone(E4, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 10 {
tone(E4, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 20 {
tone(D4, 10 << 8, 40, TONE_PULSE1);
tone(G4, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 30 {
tone(F4, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 40 {
tone(E4, 10 << 8, 40, TONE_PULSE1);
tone(C4, 30 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 50 {
tone(C6, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 60 {
tone(B5, 10 << 8, 40, TONE_PULSE1);
tone(G4, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 70 {
tone(G5, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 80 {
tone(D5, 10 << 8, 40, TONE_PULSE1);
tone(F5, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 90 {
tone(G5, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 100 {
tone(A5, 10 << 8, 40, TONE_PULSE1);
tone(A4, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 110 {
tone(A4, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 120 {
tone(G5, 10 << 8, 40, TONE_PULSE1);
tone(A4, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 130 {
tone(G4, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 140 {
tone(G4, 20 << 8, 40, TONE_PULSE1);
tone(G5, 20 << 8, 40, TONE_TRIANGLE);
}
// m3
else if self.frame == 160 {
tone(A4, 10 << 8, 40, TONE_PULSE1);
tone(F5, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 170 {
tone(G4, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 180 {
tone(F4, 10 << 8, 40, TONE_PULSE1);
tone(G5, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 190 {
tone(E4, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 200 {
tone(G4, 10 << 8, 40, TONE_PULSE1);
tone(C5, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 210 {
tone(F4, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 220 {
tone(E4, 10 << 8, 40, TONE_PULSE1);
tone(G5, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 230 {
tone(D4, 10 << 8, 40, TONE_PULSE1);
}
// m4
else if self.frame == 240 {
tone(C4, 10 << 8, 40, TONE_PULSE1);
tone(B4, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 250 {
tone(C5, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 260 {
tone(D5, 10 << 8, 40, TONE_PULSE1);
tone(G5, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 270 {
tone(G5, 10 << 8, 40, TONE_PULSE1);
} else if self.frame == 280 {
tone(C4, 10 << 8, 40, TONE_PULSE1);
tone(C4, 10 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 290 {
tone(G5, 10 << 8, 40, TONE_PULSE1);
tone(G4, 10 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 300 {
tone(C6, 10 << 8, 40, TONE_PULSE1);
tone(C4, 20 << 8, 40, TONE_TRIANGLE);
} else if self.frame == 310 {
tone(G5, 10 << 8, 40, TONE_PULSE1);
}
self.frame += 1;
if self.frame == 320 {
self.frame = 0;
}
}
}

View file

@ -1,4 +1,5 @@
use crate::helpers::round_f32_to_i32;
use crate::music::Music;
use crate::sprites::*;
use tinyrand::{Rand, StdRand};
@ -26,6 +27,7 @@ pub struct World {
rate_multiplier: f32,
status_text: Option<(&'static str, u32)>,
str_buf: [u8; 16],
music: Music,
}
impl World {
@ -44,6 +46,7 @@ impl World {
rate_multiplier: 1f32,
status_text: None,
str_buf: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
music: Music::new(),
}
}
@ -132,6 +135,7 @@ impl World {
self.score += 1;
self.rate_multiplier += MULTIPLIER_INC_RATE;
self.status_text = Some(("Speed up!", 80));
self.music.start();
}
if let Some((_, t)) = &mut self.status_text {
@ -140,6 +144,8 @@ impl World {
self.status_text.take();
}
}
self.music.update();
}
pub fn draw(&mut self) {