MIDI (.mid)

MIME type: audio/midi
Standard MIDI file format.
Audio format.
Used for controlling electronic musical instruments, computer sound cards, and sequencers.
Stores a sequence of discrete sound events such as the beginning and end of a note, velocity and timbre information, and instrument and sound bank codes.
MIDI is an acronym for Musical Instrument Digital Interface.
Binary file format.
Introduced in 1983.
Developed and published by the MIDI Manufacturers Association (US) and the Association of Musical Electronic Industry MIDI committee (Japan).
  • Export fully supports the standard MIDI file format.
  • Import supports versions 0 and 1 of the MIDI file format.

Import and ExportImport and Export

  • Import["file.mid"] imports a MIDI file, returning a sound object.
  • Export["file.mid",expr] exports a sound object to MIDI.
  • Import["file.mid",elem] imports the specified element from a MIDI file.
  • Import["file.mid",{elem,suba,subb,}] imports a subelement.
  • Import["file.mid",{{elem1,elem2,}}] imports multiple elements.
  • The import format can be specified with Import["file","MIDI"] or Import["file",{"MIDI",elem,}].
  • Export["file.mid",Sound[]] creates a MIDI file from a Sound expression consisting of SoundNote primitives.
  • Export["file.mid",expr,elem] creates a MIDI file by treating expr as specifying element elem.
  • The file format can be explicitly specified using Export["file",Sound[],"MIDI"].
  • See the reference pages for full general information on Export.
  • ExportString supports the MIDI format.

ElementsElements

  • General Import elements:
  • "Elements" list of elements and options available in this file
    "Rules"full list of rules for each element and option
    "Options"list of rules for options, properties, and settings
  • Data representation elements:
  • "Sound"MIDI file represented as a Sound object
    "Sound",nn^(th) tracks of the MIDI file given as a Sound object
    "SoundNotes"sound notes of all tracks in the MIDI file
    "SoundNotes",nsound notes of the n^(th) tracks in the MIDI file
    "RawData"raw events of all tracks in the MIDI file
    "RawData",nraw events of the n^(th) tracks in the MIDI file
  • Metadata elements:
  • "Metadata"metadata of all tracks in the MIDI file
    "Metadata",nmetadata of the n^(th) tracks in the MIDI file
    "Duration"duration in seconds
    "Header"header in the MIDI file
    "TrackCount"number of tracks in the MIDI file
  • Data representation element:
  • "Sound"a Sound expression consisting of SoundNote primitives
  • Export by default uses the element for MIDI files.
  • Export["file.mid",Sound[ SoundNote[0]]] creates a MIDI file representing the "middle C" note played for 1 second in the default style.
  • The pitch specification 0 in the Wolfram Language corresponds to MIDI pitch level 60.
  • Export["file.mid",Sound[SoundNote[pitch,t,"style"]]] specifies a duration t and an instrument style. The following General MIDI styles are supported:
  • "Accordion""Agogo""AltoSax""Applause"
    "Atmosphere""Bagpipe""Bandoneon""Banjo"
    "BaritoneSax""Bass""BassAndLead""Bassoon"
    "Bird""BlownBottle""Bowed""BrassSection"
    "Breath""Brightness""BrightPiano""Calliope"
    "Celesta""Cello""Charang""Chiff"
    "Choir""Clarinet""Clavi""Contrabass"
    "Crystal""DrawbarOrgan""Dulcimer""Echoes"
    "ElectricBass""ElectricGrandPiano""ElectricGuitar""ElectricPiano"
    "ElectricPiano2""EnglishHorn""Fiddle""Fifths"
    "Flute""FrenchHorn""FretlessBass""FretNoise"
    "Glockenspiel""Goblins""Guitar""GuitarDistorted"
    "GuitarHarmonics""GuitarMuted""GuitarOverdriven""Gunshot"
    "Halo""Harmonica""Harp""Harpsichord"
    "Helicopter""HonkyTonkPiano""JazzGuitar""Kalimba"
    "Koto""Marimba""MelodicTom""Metallic"
    "MusicBox""MutedTrumpet""NewAge""Oboe"
    "Ocarina""OrchestraHit""Organ""PanFlute"
    "PercussiveOrgan""Piano""Piccolo""PickedBass"
    "PizzicatoStrings""Polysynth""Rain""Recorder"
    "ReedOrgan""ReverseCymbal""RockOrgan""Sawtooth"
    "SciFi""Seashore""Shakuhachi""Shamisen"
    "Shanai""Sitar""SlapBass""SlapBass2"
    "SopranoSax""Soundtrack""Square""Steeldrums"
    "SteelGuitar""Strings""Strings2""Sweep"
    "SynthBass""SynthBass2""SynthBrass""SynthBrass2"
    "SynthDrum""SynthStrings""SynthStrings2""SynthVoice"
    "Taiko""Telephone""TenorSax""Timpani"
    "Tinklebell""TremoloStrings""Trombone""Trumpet"
    "Tuba""TubularBells""Vibraphone""Viola"
    "Violin""Voice""VoiceAahs""VoiceOohs"
    "Warm""Whistle""Woodblock""Xylophone"
  • Percussion sounds are represented as an expression of the form SoundNote["perc",t]. Possible percussion styles include:
  • "BassDrum""BassDrum2""BellTree""Cabasa"
    "Castanets""ChineseCymbal""Clap""Claves"
    "Cowbell""CrashCymbal""CrashCymbal2""ElectricSnare"
    "GuiroLong""GuiroShort""HighAgogo""HighBongo"
    "HighCongaMute""HighCongaOpen""HighFloorTom""HighTimbale"
    "HighTom""HighWoodblock""HiHatClosed""HiHatOpen"
    "HiHatPedal""JingleBell""LowAgogo""LowBongo"
    "LowConga""LowFloorTom""LowTimbale""LowTom"
    "LowWoodblock""Maracas""MetronomeBell""MetronomeClick"
    "MidTom""MidTom2""MuteCuica""MuteSurdo"
    "MuteTriangle""OpenCuica""OpenSurdo""OpenTriangle"
    "RideBell""RideCymbal""RideCymbal2""ScratchPull"
    "ScratchPush""Shaker""SideStick""Slap"
    "Snare""SplashCymbal""SquareClick""Sticks"
    "Tambourine""Vibraslap""WhistleLong""WhistleShort"
  • Import by default uses the element when importing from MIDI.

ExamplesExamplesopen allclose all

Basic Examples  (6)Basic Examples  (6)

A sequence of three notes, each played for 1.75 seconds:

In[1]:=
Click for copyable input
Out[1]=

Export to a MIDI file:

In[2]:=
Click for copyable input
Out[2]=

This exports some chord notes to MIDI:

In[3]:=
Click for copyable input
Out[3]=
In[4]:=
Click for copyable input
Out[4]=

Export a few percussion sounds to MIDI:

In[1]:=
Click for copyable input
Out[1]=

This creates a musical fragment in the style of WolframTones by taking cellular automaton data and mapping it to musical notes:

In[1]:=
Click for copyable input
Out[1]=

Export to MIDI:

In[2]:=
Click for copyable input
Out[2]=

Generate a basic algorithmic composition and export it to MIDI:

In[1]:=
Click for copyable input
Out[1]=
In[2]:=
Click for copyable input
Out[2]=

Import a MIDI file as a Sound object:

In[1]:=
Click for copyable input
Out[1]=

Import the SoundNote objects contained in a MIDI file:

In[1]:=
Click for copyable input
Out[1]=

Replay the notes in the MIDI file using an organ instead of a harp:

In[2]:=
Click for copyable input
Out[2]=
Introduced in 2007
(6.0)
| Updated in 2012
(9.0)