1use std::time::Instant;
2
3use midi_toolkit::{
4 events::{Event, MIDIEventEnum},
5 io::MIDIFile,
6 prelude::*,
7};
8
9pub fn main() {
10 println!("Opening midi...");
11 let midi = MIDIFile::open_in_ram(
12 "/mnt/fat/Midis/Ra Ra Rasputin Ultimate Black MIDI Final.mid",
13 None,
14 )
15 .unwrap();
16
17 let ppq = midi.ppq();
18 let merged = midi
19 .iter_all_track_events_merged_batches()
20 .cast_event_delta::<f64>()
21 .cancel_tempo_events(250000)
22 .scale_event_time(1.0 / ppq as f64)
23 .unwrap_items();
24
25 println!("Tracks: {}", midi.track_count());
26
27 let start = Instant::now();
28 let mut note_count = 0;
29 for batch in merged {
30 for e in batch.iter_events() {
31 if let Event::NoteOn(_) = e.as_event() {
32 note_count += 1;
33 }
34 }
35 }
36
37 println!("Note count: {} \tTime: {:?}", note_count, start.elapsed());
38 println!(
39 "Notes per second: {}",
40 note_count as f64 / start.elapsed().as_secs_f64()
41 );
42}