1use std::time::Instant;
2
3use midi_toolkit::{
4 events::Event,
5 io::MIDIFile,
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 println!("Parsing midi...");
14 let now = Instant::now();
15 let mut poly: u64 = 0;
16 let merged = pipe!(file.iter_all_tracks()|>to_vec()|>merge_events_array()|>unwrap_items());
17
18 let mut max_poly: u64 = 0;
19
20 for e in merged {
21 match *e {
22 Event::NoteOn(_) => {
23 poly += 1;
24 if poly > max_poly {
25 max_poly = poly;
26 }
27 }
28 Event::NoteOff(_) => poly -= 1,
29 _ => {}
30 }
31 }
32
33 println!("Finished parsing midi, found {max_poly} polyphony");
34 println!("Elapsed {:?}", now.elapsed());
35}