use std::time::Instant;
use midi_toolkit::{
events::Event,
io::{MIDIFile, MIDIWriter},
prelude::*,
};
pub fn main() {
println!("Opening midi...");
let file = MIDIFile::open_in_ram("D:/Midis/tau2.5.9.mid", None).unwrap();
let writer = MIDIWriter::new("./out.mid", file.ppq()).unwrap();
println!("Parsing midi...");
let now = Instant::now();
let mut nc: u64 = 0;
{
let mut track_writer = writer.try_open_next_track().unwrap();
let converted = file.iter_all_tracks();
let merged = converted.merge_all().unwrap_items();
for e in merged {
if let Event::NoteOn(_) = *e {
nc += 1
}
track_writer.write_event(e).unwrap();
}
}
println!("Finished parsing midi, found {nc} notes");
println!("Elapsed {:?}", now.elapsed());
println!(
"Notes/second {}",
(nc as f64 / now.elapsed().as_secs_f64()).round()
);
}