Skip to main content

events_notes/
events_notes.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("D:/Midis/tau2.5.9.mid", None).unwrap();
8    println!("Parsing midi...");
9    let now = Instant::now();
10    let mut nc: u64 = 0;
11    // for track in file.iter_all_tracks(true) {
12    //     // let track = TimeCaster::<f64>::cast_event_delta(track);
13    //     for e in pipe!(track|>unwrap_items())
14    //     // for e in pipe!(track|>TimeCaster::<f64>::cast_event_delta()|>scale_event_time(10.0)|>unwrap_items())
15    //     {
16    //         match e {
17    //             Event::NoteOn(_) => nc += 1,
18    //             _ => {}
19    //         }
20    //     }
21    // }
22    let merged = file.iter_all_tracks().merge_all().unwrap_items();
23
24    for e in merged {
25        if let Event::NoteOn(_) = *e {
26            nc += 1
27        }
28        let delta = e.delta;
29        if delta > 184467440737 {
30            dbg!(e);
31        }
32    }
33
34    println!("Finished parsing midi, found {nc} notes");
35    println!("Elapsed {:?}", now.elapsed());
36    println!(
37        "Notes/second {}",
38        (nc as f64 / now.elapsed().as_secs_f64()).round()
39    );
40}