harmonypartition works simply and cleanly with MIDI files.
Using the music21 package, harmonypartition is able to analyze a MIDI file in exactly the same way it analyzes an audio file.
Results from MIDI are cleaner than those from audio – though not necessarily better, since resonance and continuity play such a key role in analysis, performance, and understanding. But MIDI is an important and stable reference in music notation, and provides invaluable information on many levels.
analysing a MIDI file
Below is an analysis of the same progression as on the previous pages: vi-ii-V-I in C Major, from a MIDI file:
bin_a, kpdve_a = pt_analyzeMIDI.analyze_notation_file("vi_ii_V_I.mid", beats_per_slice=2)
This analysis (like all analyses in harmonypartition yields two crucial pieces of information. The first is a binary ‘punch card’ of pitches. The second is an analysis of probable function. These can be seen below. First, in binary (with analysis given below):
Second, coded by proximity and most probable (or, more to the point, laziest possible) harmonic function:
This analysis is very close to what derives from the Fourier analysis of a live performance of the same music, here played on a lightly out-of-tune piano:
further examples: MAESTRO dataset
Then, to take a leap away from the vi-ii-V-I, here is a somewhat more sophisticated examples: Prelude and Fugue in A Minor, WTC II, BWV 889 (Johann Sebastian Bach), from the MAESTRO dataset. First an analysis of the audio recording:
And here an analysis of the MIDI version of the same performance:
These analyses could use some smoothing and statistical comparison, but all in all, it’s not bad for pure binary logic – which seems like a good, rooted place to have a meeting point.