6 ms·
I wrote AutoMIDIFlip based on the #midiflip challenge going around Twitter right now - basically, take a MIDI file, flip it so that the intervals are preserved
by Sophira 10y ago
I wrote AutoMIDIFlip based on the #midiflip challenge going around Twitter right now - basically, take a MIDI file, flip it so that the intervals are preserved but in the opposite direction, and see what it sounds like. It actually has some surprisingly good results.
Andrew Huang did the first one manually, as can be seen in the YouTube video linked on the front page. I figured I could write code to automatically do it even for people who didn't have the software to do it themselves.
I plan to add more features to AutoMIDIFlip - in particular, it'd be nice to have an optional feature to auto-shift the different channels up or down octaves in order to have them occupy the same sort of range as they did in the original MIDI, as that'd probably end up with more listenable tunes. (Bass notes become screechy notes of death right now.)
So far, AutoMIDIFlip is the only automatic MIDI flipper I know of that preserves everything about the original song except for the note positions. In other words, if you flipped a tune twice, then removed the 6 extra empty MIDI tracks that AutoMIDIFlip would have added (3 per run, basically just attributing AutoMIDIFlip so that nobody just runs a MIDI file through it and calls it an original), you'd end up with exactly the same file, hash checksums and everything. There are only three exceptions to this rule:
* If the original source didn't utilise MIDI's "running status" feature (which simply acts to reduce the file size by removing redundant information - more info at http://www.midikits.net/midi_analyser/running_status.htm http://www.midikits.net/midi_analyser/running_status.htm), then the resulting file from AutoMIDIFlip will be smaller than the original. It'll still contain exactly the same information, however.
* For Format 0 MIDI files, AutoMIDIFlip will output a Format 1 MIDI file so that it can insert the empty attribution tracks. These tracks do not contain anything, and AutoMIDIFlip won't attempt to separate the file into tracks; you'll still just have one track containing all the data.
* If for some reason the input MIDI file has more tracks than are indicated in the file header, those extra tracks will not appear in the output file. This scenario should basically never occur; if it does, there's something wrong with whatever program generated the MIDI file.
I'm happy to answer any questions people might have!
- eridius 10y agoThe Flipped version of the William Tell Overture is missing most of the tracks. When I open the Original in Garage Band (macOS), it has 8 tracks (including an empty piano track). But the flipped version only has 1 track (trumpets). It looks to me like AutoMIDIFlip actually combined all of the tracks together (which of course means the instrumentation is now wrong).
- Sophira 10y agoThanks for the report! Things should be fixed now. :) Technically, it's probably GarageBand that's wrong here, but I've changed AutoMIDIFlip so that GarageBand should be happy. What was happening is that the original file is a Format 0 MIDI file. Internally, a Format 0 file only ever has one track, so all the instruments have to go into one track. That's okay because in MIDI, the channel numbers are stored per-note, so it still manages to work out. Each channel can only play one instrument at a time, though you can play multiple notes at once. It seems that when GarageBand opens a Format 0 file, it automatically splits out that one track into (I'm guessing) 16 tracks, one for each channel. It also sounds like GarageBand makes no distinction between tracks and channels, so you can only have one instrument per track. Prior to the change I just made, AutoMIDIFlip would always set the format field in the header to 1, so that it would output a Format 1 file; this was necessary so that it could add the three empty attribution tracks to the file. Everything else should have worked as before, but when GarageBand opens a Format 1 file, it will keep the layout of the tracks as specified in the MIDI file rather than splitting them into channels. Because of this, and because GarageBand doesn't have the distinction between tracks and channels, GarageBand was losing the instrumentation data that was in the original MIDI file. I've changed AutoMIDIFlip now so that it doesn't set the format field differently; if you give it a Format 0 file, you'll get a Format 0 file back. Because you can't add more tracks in that kind of file, it will append a short attribution - "(auto-flipped with automidiflip.com)" - to the title of the song instead. Again, thanks for the report!
- bambax 10y agoExcellent explanation!! Thank you! Do you know why it's possible to have different channels on the same track in MIDI? It's kind of cool to save channel information per-note, but do people really use this to have multiple instruments on one track? Like GarageBand, it seems most DAW associate a channel with a track and not individual notes. What was the use case originally?
- TheOtherHobbes 10y agoThe use case originally was a single MIDI line [1] connecting all the keyboards in a studio. Most people couldn't afford more than sixteen keyboards/samplers/drum machines, so running everything through a single MIDI output made sense. It didn't take long for multi-output MIDI interfaces to appear, but until they did everything went out of a single port, and the software worked to suit, with the channel setting on each track being used to select a playback device. [1] Technically the single line went through multiple MIDI thru connectors. But it was still the same stream of information.
- jordsta 10y agoI can't seem to play any of the example MIDI files from the homepage on my Mac, using either VLC or Quicktime. Are there any special tricks I need to do in order to get these playing?
- bambax 10y agoFor VLC you can find explanations here: https://wiki.videolan.org/Midi/ https://wiki.videolan.org/Midi/
- Sophira 10y agoI don't really know much about playing MIDIs on a Mac, unfortunately, as I'm a PC person. The only options I know of are paid; for example, GarageBand (https://www.apple.com/mac/garageband/ https://www.apple.com/mac/garageband/) can open and play MIDIs. I also know there's a player called Sweet MIDI Player, but it seems very expensive. There's a possibility you might be able to find TiMidity++ using brew.sh or similar. If you find it, you could try that - it's a command-line program, though. You'll also need a GM SoundFont to use it - you can find a list at http://www.synthfont.com/links_to_soundfonts.html http://www.synthfont.com/links_to_soundfonts.html . Note that the page links both to GM SoundFonts and single-instrument SoundFonts - you want a GM (General MIDI) one if possible, as that will have all the instruments included in General MIDI. I've been looking for some good MIDI players for Mac myself as I know other people who are looking for them. I'll let you know if I come up with anything!
- shermanyo 10y agoI'm curious if some of the dissonance comes from basing everything off the root note of the key, rather than each chord in a phrase? I'd be interested to hear the results on a piece following this algorithm in comparison.