//
Inversed Piano.

Create Inverted Music using Python

Ever wondered how inverted music would sound like? Do you know what the original song is of this inverted song (and don’t look at the URL!)? In this post, some MIDI files are inverted and it is shown how you can invert a MIDI file yourself.

Inverted Music

As inspired by this video, inverted music is defined as follows here. Suppose there is a basenote of value V. Any note of value X will be changed in opposite direction, such that the inverted note has value V + (X - V). So, the function f which inverts a note is defined as f(X) := V + (X - V).

As an example, assume that D is the basenote. A C (which has a distance 2 to D [C C# D]) is converted to an E (a distance 2 in the opposite direction: [D D# E]). Something funny happens with chords. A major chords will become a minor chord once it is inverted. Check it out yourself by looking at f(X), f(X+4) and f(X+7).


Are you interested in learning more Python? Order our new "Mastering Pandas" course now on Data Blogger Courses for only €39.99 €28.10! You will:
  • Learn to visualize data using Pandas
  • Learn how to load and store data effectively
  • Learn advanced data operations
For the price of only three pizzas, you will join our Data Blogger community, so don't miss out and make sure to get your copy now.

Programming

The code can be found on GitHub. It just applies the rule above on all the MIDI tracks (except for the drum track).

    for track in mid.tracks:
        new_track = MidiTrack()
        if 'drum' in track.name.lower():
            new_track = track
        else:
            for message in track:
                if isinstance(message, MetaMessage):
                    new_track.append(message)
                else:
                    if 'note' in dir(message):
                        inverted_note = basenote - (message.note - basenote)
                        new_track.append(message.copy(note=inverted_note, time=int(message.time)))
                    else:
                        new_track.append(message)

        inverted.tracks.append(new_track)

Python is besides music also suitable for machine learning tasks. Maybe this article on fraud detection using machine learning algorithms is interesting for you. If not, you might be interested in a simple tutorial on building a spam detection system.

Inverted MIDI files

Check out the original Fools Garden – Lemon Tree MIDI file and the inverted MIDI file.

Conclusion

It is actually quite fun to experiment with MIDI files. Except for the poor quality of the music, it gives lots of insights into the dynamics of a piece of music. Have fun with inverting your MIDI files :-)!

Help building the Data Blogger Community

Help to grow our community to spread AI and Data Science education around the globe.
Every penny counts.

Kevin Jacobs

I'm Kevin, a Data Scientist, PhD student in NLP and Law and blog writer for Data Blogger. You can reach me via Twitter (@kmjjacobs) or LinkedIn.