Skip to content

Edit MIDI files to other scales, modes and harmonies to obtain new sonorities (more than 70 scales / modes included)

Notifications You must be signed in to change notification settings

Modrigue/MidiSlicer

 
 

Repository files navigation

MidiEditor

Edit MIDI files to other scales, modes and harmonies to obtain new sonorities (more than 70 scales / modes included). Follow only these few steps:

  • Open a MIDI file,
  • Choose the note(s) to change or
  • Choose the original tonic and scale (for instance C Major),
  • Choose the new destination tonic and scale (for instance C Natural Minor),
  • Click on Save as to export the new MIDI file or Save all to export to multiple MIDI files with all scales with corresponding number of notes,
  • Listen to what happens...

Inversion scale depends on note's octave, therefore it is recommended to invert given the suitable reference octave note.

Works with GUI and command line:

MIDIEditor <file.mid> --src-tonic <noteSrc> --src-scale <scaleIdSrc>
                      --dst-tonic <noteDst> --dst-scale <scaleIdDst>

Command line options:

  • --src-tonic <noteSrc> : Sets the original tonic to specified note,
  • --src-scale <scaleIdSrc> : Sets the original tonic to specified scale,
  • --dst-tonic <noteDst> : Sets the destination tonic to specified note,
  • --dst-scale <scaleIdDst> : Sets the destination tonic to specified scale and save new file (with automatic naming).

<noteSrc> and <noteDst> are designated by international notation: A, A#, B, C, C#, D... <scaleIdSrc> and <scaleIdDst> are designated by scales identifiers, listed in attached MidiEditor/Scales.txt file.

If <scaleIdDst> is set to all, the file will be exported to multiple files with all scales with corresponding number of notes.

Example usage:

MidiEditor.exe "..\samples\Bach - Prelude in C Major.mid" --src-tonic C --src-scale 7major_nat,1
                                                          --dst-tonic C --dst-scale all

Have fun!

MidiSlicer and Midi library

Midi is a small library providing a full featured, easy to use managed wrapper over Microsoft Windows' MIDI API, as well as providing for reading, writing and manipulating MIDI files and in-memory MIDI sequences. It is smaller than other libraries like Wet Dry MIDI and lower level in many ways.

I do some MIDI sequencing and recording and I found it helpful to be able to splice sections out of a MIDI file, but I didn't have a tool that made it easy to do. In the process of creating such a tool, I made a Midi assembly that contained the core MIDI file manipulation options. I also wrote some remedial playback code at first, which used the 32-bit Windows MIDI API.

That library grew as I added more features and shored up what I had. I added some more demos, streaming support, MIDI input support, device enumeration and more. Eventually, I had wrapped maybe 90-95% of the API, and had a battery of MIDI manipulation functions for searching and modifying in memory sequences and files.

In the process, MidiSlicer moved from a first class application to just another demo project, so the solution is still named MidiSlicer - I'm stuck with the GitHub of that name. The core library project is named Midi.

I wrote a comprehensive article at codeproject on using this library, and I recommend using it. The latest version of the code is always here at GitHub.

About

Edit MIDI files to other scales, modes and harmonies to obtain new sonorities (more than 70 scales / modes included)

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 85.7%
  • HTML 13.5%
  • C++ 0.8%