Skip to main content

nps_bench/
nps_bench.rs

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}