From eb1a537ce2fea33a3d5508aca1448ce27566ff3f Mon Sep 17 00:00:00 2001 From: breel Date: Thu, 12 Mar 2026 15:55:37 -0600 Subject: [PATCH] 1*ANY for counts since 60 was arbitrary between middleC and 6*0 --- src/play.rs | 27 +++++++++++++++++--------- src/seq.rs | 13 ++++++++----- src/testdata/sandbox.txt | 11 +++++++++-- src/testdata/two_channels_one_bar.txt | 4 ++-- src/testdata/two_channels_two_bars.txt | 4 ++-- 5 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/play.rs b/src/play.rs index b396ca8..17ae3bb 100644 --- a/src/play.rs +++ b/src/play.rs @@ -18,7 +18,7 @@ fn from_string(s: String) -> String { } fn parse(s: String) -> Vec { - let s = s + let s = s .split("\n") .filter(|x: &&str| !x // doesnt start with # .split_whitespace() @@ -41,15 +41,24 @@ fn parse(s: String) -> Vec { let lines = s.split("\n").collect::>(); let mut j = 0; for i in 0..lines.len() { - while channels.len() <= j { - channels.push("".to_string()); - } match lines[i] { - "" => { j = 0; }, - _ => channels[{ let tmp = j; j += 1; tmp }] += &(" ".to_string() + lines[i]), + "" => { + j = 0; + }, + _ => { + while channels.len() <= j { + channels.push("".to_string()); + } + channels[{ let tmp = j; j += 1; tmp }] += &(" ".to_string() + lines[i]); + }, }; } - channels.iter().map(|x| x.split_whitespace().collect::>().join(" ")).collect() + channels + .iter() + .map(|x| x.split_whitespace().collect::>() + .join(" ") + ) + .collect() } #[cfg(test)] @@ -72,7 +81,7 @@ mod test { fn test_two_channels_one_bar() { assert_eq!( super::new("src/testdata/two_channels_one_bar.txt")[0], - "2a 2b 2c".to_string() + "2*a 2*b 2*c".to_string() ); assert_eq!( super::new("src/testdata/two_channels_one_bar.txt")[1], @@ -88,7 +97,7 @@ mod test { ); assert_eq!( super::new("src/testdata/two_channels_two_bars.txt")[1], - "2a 2b 2c 2d 2e 2f".to_string() + "2*a 2*b 2*c 2*d 2*e 2*f".to_string() ); } diff --git a/src/seq.rs b/src/seq.rs index a3a8696..f315559 100644 --- a/src/seq.rs +++ b/src/seq.rs @@ -112,12 +112,13 @@ impl Seq { let s: String = s.to_string(); let s: &str = s.as_ref(); for split in s.split_whitespace() { + eprintln!("append_one({:?}) from {:?}", split.to_string(), s); self.append_one(split.to_string()); } } fn append_one(&mut self, s: String) { - let re = regex::Regex::new(r"^(?[0-9]*)(?.*)$").unwrap(); + let re = regex::Regex::new(r"^((?[0-9]+)\*)?(?.*)$").unwrap(); let captures = re.captures(&s).unwrap(); let n = match captures.name("count") { @@ -125,7 +126,9 @@ impl Seq { _ => 1, } as usize; - let tone = tone::new(captures.name("tone").unwrap().as_str()); + let tone_s = captures.name("tone").unwrap().as_str(); + eprintln!("append_one({:?})", tone_s); + let tone = tone::new(tone_s); self.beats.push((n, tone)); } } @@ -139,9 +142,9 @@ mod test { let mut seq = new(); seq.append("c c"); - seq.append("4d"); - seq.append("2-"); - seq.append("g 2e"); + seq.append("4*d"); + seq.append("2*-"); + seq.append("g 2*e"); assert_eq!(seq.beats.len(), 6); assert_eq!(seq.len(), 11); diff --git a/src/testdata/sandbox.txt b/src/testdata/sandbox.txt index ae649be..6a8525f 100644 --- a/src/testdata/sandbox.txt +++ b/src/testdata/sandbox.txt @@ -1,4 +1,11 @@ -CM0 CM3 CM4 CM0 - +#CM0 CM3 CM4 CM0 #CM1 CM4 CM0 #CM0 CM4 CM5 CM3 + +# 1 4 6 4 # pop101 +#GM0 GM3 GM5 GM3 + +60 +63 + +6*a diff --git a/src/testdata/two_channels_one_bar.txt b/src/testdata/two_channels_one_bar.txt index 58b8fea..ae9fd8b 100644 --- a/src/testdata/two_channels_one_bar.txt +++ b/src/testdata/two_channels_one_bar.txt @@ -1,2 +1,2 @@ -2a 2b 2c -. a5 . b5 . c5 +2*a 2*b 2*c +. a5 . b5 . c5 diff --git a/src/testdata/two_channels_two_bars.txt b/src/testdata/two_channels_two_bars.txt index 4ab8240..8c3275f 100644 --- a/src/testdata/two_channels_two_bars.txt +++ b/src/testdata/two_channels_two_bars.txt @@ -1,5 +1,5 @@ a b c -2a 2b 2c +2*a 2*b 2*c d e f -2d 2e 2f +2*d 2*e 2*f