MIDI (.mid)
予備知識
-
- MIMEタイプ:audio/midi
- 標準的なMIDIファイル形式.
- オーディオ形式.
- 楽器,コンピュータサウンドカード,シーケンサの制御に使われる.
- 音の開始,終了等離散的なサウンドのイベント,速さ,音響情報,楽器,サウンドバンクコードを格納する.
- MIDIはMusical Instrument Digital Interfaceの頭文字である.
- バイナリファイル形式.
- 1983年に発表された.
- MIDI Manufacturers Association (US)と社団法人音楽電子事業協会(日本)によって開発,発行されている.
ImportとExport
- Import["file.mid"]はMIDIファイルをインポートし,サウンドオブジェクトを返す.
- Export["file.mid",expr]はサウンドオブジェクトをMIDIにエキスポートする.
- Import["file.mid",elem]はMIDIファイルから指定された要素をインポートする.
- Import["file.mid",{elem,suba,subb,…}]はサブ要素をインポートする.
- Import["file.mid",{{elem1,elem2,…}}]は複数の要素をインポートする.
- インポート形式はImport["file","MIDI"]またはImport["file",{"MIDI",elem,…}]で指定できる.
- Export["file.mid",Sound[…]]はSoundNoteプリミティブから成るSound式から,MIDIファイルを作成する.
- Export["file.mid",MusicScore[…]]は,記号的な音楽のプリミティブから成るMusicScore式から,MIDIファイルを作成する.
- Export["file.mid",expr,elem]はexpr が要素,elem を指定するものとして扱うことにより,MIDIファイルを作成する.
- ファイル形式は明示的にExport["file",Sound[…],"MIDI"]と指定できる.
- 一般的な情報は,以下の関数ページを参照のこと.
-
Import, Export ファイルからインポートする,あるいはファイルへエキスポートする CloudImport, CloudExport クラウドオブジェクトからインポートする,あるいはクラウドオブジェクトへエキスポートする ImportString, ExportString 文字列からインポートする,あるいは文字列へエキスポートする ImportByteArray, ExportByteArray バイト配列からインポートする,あるいはバイト配列へエキスポートする
要素
- 一般的なImport要素:
-
"Elements" ファイル中の有効な要素とオプションのリスト "Summary" ファイルの概要 "Rules" 使用可能なすべての要素の規則のリスト - データ表現要素:
-
"Sound" Soundオブジェクトとして表されるMIDIファイル "Sound",n Soundオブジェクトとして与えられるMIDIファイルの n 番目のトラック "SoundNotes" MIDIファイルの全トラックの音符 "SoundNotes",n MIDIファイルの n 番目のトラックの音符 "MusicScore" MusicNote オブジェクトとして表されるMIDIファイル "MusicVoice" MIDIファイルのトラックからのMusicVoiceオブジェクト "MusicVoice",n MIDIファイルの n 番目のトラックからのMusicVoice object "RawData" MIDIファイルの全トラックの生イベント "RawData",n MIDIファイルの n 番目のトラックの生イベント - メタデータ要素:
-
"Metadata" MIDIファイルの全トラックのメタ情報 "Metadata",n MIDIファイルの n 番目のトラックのメタデータ "Duration" 長さ(秒) "Header" MIDIファイルのヘッダ "TrackCount" MIDIファイルのトラック数 - データ表現要素:
-
"Sound" SoundNoteプリミティブから成るSound式 - MIDIファイルではExportはデフォルトで "Sound"要素を使う.
- Export["file.mid",Sound[ SoundNote[0]]]は「中央ハ」の音をデフォルトの"Piano"(ピアノ)スタイルで1秒間再生するMIDIファイルを作成する.
- Wolfram言語でのピッチ(音程)指定の0は,MIDIのピッチレベル 60に対応している.
- Export["file.mid",Sound[SoundNote[pitch,t,"style"]]] は持続時間 t と楽器のスタイルを指定する.以下の一般的なMIDIスタイルがサポートされている:
-
"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" - パーカッションの音はSoundNote["perc",t]の式で表される.以下が可能なパーカッションスタイルである:
-
"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はMIDIのインポートにデフォルトで"Sound"要素を使用する.
例題
すべて開く すべて閉じる例 (6)
Sound[SoundNote[#, 1.75, "Trumpet"]& /@ {0, 7, 12}]Export["sequence.mid", %]Sound[{SoundNote[{-12, 0, 4, 7, 12, 16}, 0.2, "Trumpet"], SoundNote[{-12, 0, 3, 7, 12, 15}, 2.2, "Trumpet"]}]Export["chords.mid", %]Export["perc.mid", Sound[ SoundNote["RideCymbal", #] & /@ {0.26, 0.1, 0.26, 0.1, 2} ] ]単一の声部を持つシンプルなMusicScoreオブジェクト:
MusicScore[{"G", "A", "D", "C"}]Export["score.mid", %]MusicScore[{MusicVoice@{"G", "A", "D", "C"}, MusicVoice[{"C", "D", "F", "G"}]}]Export["score2.mid", %]SoundオブジェクトとしてMIDIファイルをインポートする:
Import["ExampleData/scaleprogression.mid"]MusicScoreオブジェクトとしてMIDIファイルをインポートする:
Import["ExampleData/scaleprogression.mid", "MusicScore"]MusicVoiceオブジェクトのリストとしてMIDIファイルをインポートする:
Import["ExampleData/scaleprogression.mid", "MusicVoice"]スコープ (3)
セルオートマトンのデータを音にマッピングしてWolframTones スタイルの部分的な音楽を作成する:
Sound[SoundNote[#, 1 / 5, "Harpsichord"]& /@ (Pick[{0, 4, 7, 12, 16}, #, 1]& /@ CellularAutomaton[ 60, {{1, 0, 0, 0, 0}, 0}, 15, {15, 4}]) ]Export["rule60.mid", %]基本的なアルゴリズムベースの作曲をして,それをMIDIにエキスポートする:
Sound[Table[SoundNote[ #, 1 / 12, "Harp" ]& /@ Pick[Range[12], IntegerDigits[scale, 2, 12], 1], {scale, 2304, 2352}]]Export["scaleprogression.mid", %]MIDIファイルに含まれるSoundNoteオブジェクトをインポートする:
sn = Import["ExampleData/scaleprogression.mid", "SoundNotes"];
Take[sn[[1]], 10]MIDIファイルに含まれる音符を,ハープの代りにオルガンでもう一度演奏する:
Sound[sn /. {"Harp" -> "Organ"}]Importオプション (2)
"QuantizationLevel" (1)
MusicScoreオブジェクトとしてMIDIファイルをインポートする:
Import["ExampleData/scaleprogression.mid", "MusicScore"]Import["ExampleData/scaleprogression.mid", "MusicScore", "QuantizationLevel" -> None]Import["ExampleData/scaleprogression.mid", "MusicScore", "QuantizationLevel" -> 1 / 32]MusicTempo (1)
MusicScoreオブジェクトとしてMIDIファイルをインポートする:
Import["ExampleData/scaleprogression.mid", "MusicScore"]MusicMeasurements[%, "NoteList"][[1, ;; 4]]MusicTempoオプションを使用して,インポート時にテンポとして180ビート/分を使用するように強制する:
Import["ExampleData/scaleprogression.mid", "MusicScore", MusicTempo -> 180]MusicMeasurements[%, "NoteList"][[1, ;; 4]]