MIDI(ミディ、Musical Instrument Digital Interface)とは電子楽器の演奏データを機器間でやり取りする規格です。音声データ(マイクなどで録音した音の波形をサンプリングしたもの)ではなく演奏情報(音の高さや大きさといった楽器への指令)を扱うので、データサイズが小さいという特徴があります。また簡単に音楽の一部を変更することもできます。データサイズが小さいので、昔からファミコンなどのゲーム音楽にも使われてきました。今回はPythonでMIDI音楽を作成、再生するプログラムを作ってみたので紹介します。

ソースコード

実際に演奏した音

ソースコードの説明

今回、MIDI演奏はpygameを用いています。インストールしていない人は以下のコマンドでインストールしてください。

音を鳴らす関数です。pygame.midi.Outputオブジェクトのnote_on関数で音を鳴らしています。第一引数は音階の番号、第二引数は音の強さです。sleep関数で一定時間、音を鳴らした後、note_off関数で音を止めています。引数はnote_on関数と同じです。

pygameのMIDIを初期化した後、MIDIの出力先を指定し、そのオブジェクトを取得しています(出力先の番号は環境によって違うかもしれません)。またset_instrumentメソッドで楽器の種類を指定しています。0から127の値をとり、「0」はピアノです。他には19番がオルガン、56番がトランペットなどがあります。詳しくは以下のサイトを確認してください。

https://fmslogo.sourceforge.io/manual/midi-instrument.html

音階(ドレミファソラシド)とMIDIの番号の対応を辞書型変数のNOTESに格納しています。また無音時間を「間」と定義しています。

カエルの歌の音階とそれぞれの音の長さを定義しています。二分音符=1、四分音符=0.5、八分音符=0.25となっています。私は音楽素人なので、このあたりは正確でないかもしれません(すみません)。

forループで、それぞれの音階をtone関数で出力し、「間」のときはスリープしています。

最後にMIDIを閉じて終了です。

いかがだったでしょうか。Pythonで簡単に音楽を作成できました。私は楽器は全く演奏できませんが、これなら自分で作曲もできそうです。