diff options
| author | Freya Murphy <freya@freyacat.org> | 2025-11-22 01:00:53 -0500 |
|---|---|---|
| committer | Freya Murphy <freya@freyacat.org> | 2025-11-22 01:00:53 -0500 |
| commit | 20dc6941752047a2e94176340a1297304dc7f123 (patch) | |
| tree | 032826be32887e777138fa199025fa0f77670ce1 /graphics | |
| parent | audio: fix tempo (off by one, rahhhgit status!) (diff) | |
| download | DungeonCrawl-20dc6941752047a2e94176340a1297304dc7f123.tar.gz DungeonCrawl-20dc6941752047a2e94176340a1297304dc7f123.tar.bz2 DungeonCrawl-20dc6941752047a2e94176340a1297304dc7f123.zip | |
audio: change tempo -> pause_len
Diffstat (limited to 'graphics')
| -rw-r--r-- | graphics/src/audio/data.rs | 3 | ||||
| -rw-r--r-- | graphics/src/audio/parse/lex.rs | 6 | ||||
| -rw-r--r-- | graphics/src/audio/parse/parser.rs | 4 | ||||
| -rw-r--r-- | graphics/src/audio/program.rs | 27 |
4 files changed, 19 insertions, 21 deletions
diff --git a/graphics/src/audio/data.rs b/graphics/src/audio/data.rs index 5011758..8ed95bb 100644 --- a/graphics/src/audio/data.rs +++ b/graphics/src/audio/data.rs @@ -3,7 +3,7 @@ use crate::audio::{parse, program::Program}; const MELODY: &str = r#" ; setup a v100 d50 -o120 +P4 %define notes a p$1 v100 - a v0 - @@ -34,7 +34,6 @@ const BASE: &str = r#" ; setup b v100 d50 -o120 %define notes b p$1 v100 -- b v0 -- diff --git a/graphics/src/audio/parse/lex.rs b/graphics/src/audio/parse/lex.rs index a349c53..9969c9e 100644 --- a/graphics/src/audio/parse/lex.rs +++ b/graphics/src/audio/parse/lex.rs @@ -12,8 +12,8 @@ pub enum Token { Eof, LineSeparator, Pause(usize), + PauseLen(u32), Jump(usize), - Tempo(u32), ChanSpec(ChanSpec), SetVolume(u8), SetPitch(u8), @@ -179,8 +179,8 @@ impl<'s> Lexer<'s> { '-' => self.next_pause()?, // jump 'j' => T::Jump(self.next_int()?), - // tempO - 'o' => T::Tempo(self.next_int()?), + // pause len + 'P' => T::PauseLen(self.next_int()?), // eof '\0' => T::Eof, // new line diff --git a/graphics/src/audio/parse/parser.rs b/graphics/src/audio/parse/parser.rs index 23ba8a4..5157fa1 100644 --- a/graphics/src/audio/parse/parser.rs +++ b/graphics/src/audio/parse/parser.rs @@ -87,9 +87,9 @@ impl<'s> Parser<'s> { self.next()?; prog.push(Instruction::Jump(pc)); } - Token::Tempo(tempo) => { + Token::PauseLen(pause_len) => { self.next()?; - prog.push(Instruction::Tempo(tempo)); + prog.push(Instruction::PauseLen(pause_len)); } _ => self.parse_line(&mut prog)?, } diff --git a/graphics/src/audio/program.rs b/graphics/src/audio/program.rs index 270a214..b5cc363 100644 --- a/graphics/src/audio/program.rs +++ b/graphics/src/audio/program.rs @@ -1,5 +1,5 @@ use crate::audio::{ - AUDIO_FPS, Channels, + Channels, channel::{Channel, DutyCycle}, parse, }; @@ -15,8 +15,8 @@ pub enum ChanSpec { #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum Instruction { Pause, + PauseLen(u32), Jump(usize), - Tempo(u32), SetVolume(ChanSpec, u8), SetPitch(ChanSpec, u8), SetPulseDutyA(DutyCycle), @@ -42,8 +42,8 @@ pub struct Program { ins: Vec<Instruction>, pc: usize, looping: bool, - tempo: u32, - pause: u32, + pause_cnt: u32, + pause_len: u32, } impl Program { pub const fn new(ins: Vec<Instruction>, looping: bool) -> Self { @@ -52,8 +52,8 @@ impl Program { ins, pc, looping, - tempo: 120, - pause: 0, + pause_cnt: 0, + pause_len: 4, } } @@ -98,15 +98,14 @@ impl Program { use Instruction as I; match ins { I::Pause => { - // pause execution until next `exec` call - self.pause = (AUDIO_FPS * 8) / self.tempo.clamp(1, 240); + self.pause_cnt = self.pause_len; + } + I::PauseLen(pause_len) => { + self.pause_len = pause_len; } I::Jump(pc) => { self.pc = pc; } - I::Tempo(tempo) => { - self.tempo = tempo; - } I::SetVolume(chan_spec, volume) => { // set the volume (amplitude) on a given channel use ChanSpec as C; @@ -142,11 +141,11 @@ impl Program { } pub fn exec(&mut self, channels: &mut Channels) { - if self.pause > 0 { - self.pause -= 1; + if self.pause_cnt > 0 { + self.pause_cnt -= 1; } loop { - if self.pause > 0 { + if self.pause_cnt > 0 { break; } if self.finished() { |