76 lines
1.8 KiB
Rust
76 lines
1.8 KiB
Rust
use io_prompt_prototype::prompt;
|
|
use itertools::Itertools;
|
|
|
|
mod flags;
|
|
mod parse;
|
|
mod player;
|
|
mod seq;
|
|
mod syn;
|
|
mod tone;
|
|
|
|
fn main() {
|
|
let flags = flags::Flags::new();
|
|
if flags.debug {
|
|
eprintln!("{:?}", flags);
|
|
}
|
|
|
|
let once = flags.play.iter().filter(|x| x.len() > 0).count() > 0;
|
|
let mut player = player::new(flags.sample_rate.clone(), flags.bpm.clone());
|
|
loop {
|
|
play_with_flags(&flags, &mut player);
|
|
if once {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
fn play_with_flags(flags: &flags::Flags, player: &mut player::Player) {
|
|
let mut syn_seq = seq::new_syn(syn::Syn::new(
|
|
flags.debug.clone(),
|
|
flags.sound_font.clone(),
|
|
flags.sample_rate.clone(),
|
|
));
|
|
|
|
let mut i = 0;
|
|
for p in flags.play.iter() {
|
|
for p in parse::new(p.clone()) {
|
|
syn_seq.append(i as i32, p);
|
|
i += 1;
|
|
}
|
|
}
|
|
|
|
let sync = i > 0;
|
|
if !sync {
|
|
let mut to_break = false;
|
|
let mut payload = vec![];
|
|
loop {
|
|
let mut s: String = prompt!("> ").parse().expect("failed to readline");
|
|
s = s.split_whitespace().join(" ");
|
|
payload.push(s.clone());
|
|
match s.as_ref() {
|
|
"" => match to_break {
|
|
false => {
|
|
to_break = true;
|
|
}
|
|
true => {
|
|
break;
|
|
}
|
|
},
|
|
_ => {
|
|
to_break = false;
|
|
}
|
|
};
|
|
}
|
|
|
|
for p in parse::new(payload.join("\n")) {
|
|
syn_seq.append(i as i32, p);
|
|
i += 1;
|
|
}
|
|
}
|
|
|
|
match sync {
|
|
true => player.play(syn_seq),
|
|
false => player.play_async(syn_seq),
|
|
};
|
|
}
|