1use std::time::Instant;
2
3use midi_toolkit::{
4 events::Event,
5 io::{MIDIFile, MIDIWriter},
6 pipe,
7 sequence::{event::merge_events_array, to_vec, unwrap_items},
8};
9
10pub fn main() {
11 println!("Opening midi...");
12 let file = MIDIFile::open_in_ram("D:/Midis/tau2.5.9.mid", None).unwrap();
13 let writer = MIDIWriter::new("./out.mid", file.ppq()).unwrap();
14 println!("Parsing midi...");
15 let now = Instant::now();
16
17 let mut nc: u64 = 0;
18 {
19 let mut track_writer = writer.open_next_track();
20 let converted = file.iter_all_tracks();
22 let merged = pipe!(converted|>to_vec()|>merge_events_array()|>unwrap_items());
24 for e in merged {
25 if let Event::NoteOn(_) = *e {
26 nc += 1
27 }
28 track_writer.write_event(e).unwrap();
29 }
30 }
31
32 println!("Finished parsing midi, found {nc} notes");
33 println!("Elapsed {:?}", now.elapsed());
34 println!(
35 "Notes/second {}",
36 (nc as f64 / now.elapsed().as_secs_f64()).round()
37 );
38}