polyphony/
polyphony.rs

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}