craffel/pretty-midi

Wrong tempo

page200 opened this issue · 1 comments

This video is a visualization of this MIDI file (linked in the video description).

Both according to the video and to my MIDI players, the duration of the file is 257 seconds. Therefore, pretty_midi.PrettyMIDI('Yann Tiersen - Sur Le Fil (Clean version).mid').get_piano_roll(fs=1).shape[1] should yield 257 (due to fs=1). However, it yields 186 (the piano roll is about 1.4 times too fast) and the following warning:

pretty_midi\pretty_midi.py:97: RuntimeWarning: Tempo, Key or Time signature change events found on non-zero tracks. This is not a valid type 0 or type 1 MIDI file. Tempo, Key or Time Signature may be wrong.

I recall similar problems with other MIDI files.

What software can I use to inspect and fix the validity of the MIDI file? How do normal media players recognize the correct tempo, and might pretty_midi use the same recognition method?

The error message means that there are timing events on some track other than 0. You should edit the MIDI file to put those events on track 0. You can do this with mido, for example. Most media players are more forgiving than pretty_midi and obey timing events on any track.