diff --git a/media/bad_apple.mid b/media/bad_apple.mid new file mode 100644 index 0000000..563f886 Binary files /dev/null and b/media/bad_apple.mid differ diff --git a/src/main.rs b/src/main.rs index 03704d6..29f9171 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,8 +2,14 @@ use std::{fs, io::{stdout, Write}}; use midly::Smf; -const FILENAME: &str = "media/TOUHOU - Bad Apple!!.mid"; -const STEP: u32 = 96; +// const FILENAME: &str = "media/TOUHOU - Bad Apple!!.mid"; +// const STEP: u32 = 96; +// const HIGHEST_NOST: u32 = 90; +// const TRACK: usize = 0; + +const FILENAME: &str = "media/bad_apple.mid"; +const STEP: u32 = 32; +const HIGHEST_NOTE: usize = 84; const TRACK: usize = 0; fn get_u32(bits: &[bool; 32]) -> u32 { @@ -25,9 +31,14 @@ fn main() { let mut current_on_upper = [false; 32]; // higher notes let mut current_on_lower = [false; 32]; // lower notes + let highest_upper_note = HIGHEST_NOTE; + let lowest_upper_note = HIGHEST_NOTE - 31; + let highest_lower_note = HIGHEST_NOTE - 32; + let lowest_lower_note = HIGHEST_NOTE - 63; + let track = &smf.tracks[TRACK]; for (_, event) in track.iter().enumerate() { - // println!("{}", event.delta); + eprintln!("delta: {}", event.delta); let mut delta = event.delta.as_int(); while delta >= STEP { delta -= STEP; @@ -40,28 +51,29 @@ fn main() { midly::TrackEventKind::Midi { channel: _, message } => match message { midly::MidiMessage::NoteOff { key, vel: _ } => { let key_i = key.as_int() as usize; - if key_i >= 59 && key_i <= 90 { - current_on_upper[key_i-59] = false; + if key_i >= lowest_upper_note && key_i <= highest_upper_note { + current_on_upper[key_i - lowest_upper_note] = false; } - if key_i >= 27 && key_i <= 58 { - current_on_lower[key_i-27] = false; + if key_i >= lowest_lower_note && key_i <= highest_lower_note { + current_on_lower[key_i - lowest_lower_note] = false; } } midly::MidiMessage::NoteOn { key, vel: _ } => { let key_i = key.as_int() as usize; - if key_i >= 59 && key_i <= 90 { - current_on_upper[key_i-59] = true; + eprintln!("key: {}", key_i); + if key_i >= lowest_upper_note && key_i <= highest_upper_note { + current_on_upper[key_i - lowest_upper_note] = true; } - if key_i >= 27 && key_i <= 58 { - current_on_lower[key_i-27] = true; + if key_i >= lowest_lower_note && key_i <= highest_lower_note { + current_on_lower[key_i - lowest_lower_note] = true; } } _ => { - // println!("event {}: {:?}", i, message); + // eprintln!("event {}: {:?}", i, message); } }, _ => { - // println!("event {}: {:?}", i, event); + // eprintln!("event {}: {:?}", i, event); } } }