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