Skip to content
A python tool to invert the tonality (a.k.a negative harmony) of midi notation
Python
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea initial commit Feb 21, 2018
midi_files refactored a bit Feb 21, 2018
.gitignore added arguments Mar 29, 2018
.gitmodules refactored a bit Feb 21, 2018
NegativeHarmonizer.py updated readme Feb 12, 2019
README.md Update README.md Sep 12, 2019

README.md

NegativeHarmonizer

NegativeHarmonizer is a simple python program to invert the tonality of a music file. This works very well for compositions like Bach's fugues. If you try it on popular music, you'll probably need to transpose the instruments back into their proper ranges, as the bass will be on the top. Beyond the fun of negative-harmonizing songs you know, this is a useful tool for composers and producers to add variations to their work.

Dependencies:

  • Python 3
  • mido
    • pip install mido

Usage:

python NegativeHarmonizer.py midifile.mid --tonic 60 --ignore 9 --adjust-octaves

This example command

  1. creates a new midifile named midifile_negative.mid
  2. flipped over middle C (midi note number 60)
  3. channel 9 is unaltered because we don't want to change the drums.
  4. the tracks are transposed to be close to their original octave, so the bass guitar will stay in the bass range etc.

You can hear more examples of what can be done with NegativeHarmonizer on my YouTube channel (with some neat Tonnetz Lattice visualizations):

Beethoven, Symphony 5, 1st movement: Negative Harmony

Some background on Negative Harmony from Jacob Collier: https://youtu.be/DnBr070vcNE?t=1m31s

Real-time MIDI plug-in for DAWs

You can find the plug-in version here: https://github.com/lukemcraig/negative-harmonizer-plugin

You can’t perform that action at this time.