Skip to main content

polyphony/
polyphony.rs

1use std::time::Instant;
2
3use midi_toolkit::{events::Event, io::MIDIFile, prelude::*};
4
5pub fn main() {
6    println!("Opening midi...");
7    let file = MIDIFile::open_in_ram("D:/Midis/tau2.5.9.mid", None).unwrap();
8    println!("Parsing midi...");
9    let now = Instant::now();
10    let mut poly: u64 = 0;
11    let merged = file.iter_all_tracks().merge_all().unwrap_items();
12
13    let mut max_poly: u64 = 0;
14
15    for e in merged {
16        match *e {
17            Event::NoteOn(_) => {
18                poly += 1;
19                if poly > max_poly {
20                    max_poly = poly;
21                }
22            }
23            Event::NoteOff(_) => poly -= 1,
24            _ => {}
25        }
26    }
27
28    println!("Finished parsing midi, found {max_poly} polyphony");
29    println!("Elapsed {:?}", now.elapsed());
30}