MIDI (.mid)

Background

    • 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).

Import & 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.

Import Elements

  • 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 "Sound" 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 "Piano" 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 "Sound" element when importing from MIDI.

Examples

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)