Mido入門

PythonでMIDIファイルを生成することができるライブラリ「Mido」の使い方についてメモします。

準備

Midoをインストールします。

$ pip install mido

基本

下のコードは「ドレミファ」と鳴らすMIDIファイルを生成します。

import mido
from mido import Message, MidiFile, MidiTrack,MetaMessage

bpm = 150
program = 41
fn_midi = "sample.mid"

mid = MidiFile()
track = MidiTrack()

track.append(Message('program_change', program=program))
track.append(MetaMessage('set_tempo', tempo=mido.bpm2tempo(bpm)))

track.append(Message('note_on', note=60, velocity=64, time=0))
track.append(Message('note_off', note=60, time=360))

track.append(Message('note_on', note=62, velocity=64, time=120))
track.append(Message('note_off', note=62, time=360))

track.append(Message('note_on', note=64, velocity=64, time=120))
track.append(Message('note_off', note=64, time=360))

track.append(Message('note_on', note=65, velocity=64, time=120))
track.append(Message('note_off', note=65, time=360))

mid.tracks.append(track)

mid.save(fn_midi)

生成したMIDIファイルは次のとおりです。

sample.mid

MIDIファイルをWAVファイルに変換しました。

基本の説明

変数は次のとおりです。
bpmでテンポを指定します。
programで音色を指定します。41はバイオリンです。
fn_midiで生成ファイル名を指定します。

MidiFileでMIDIファイルを作って、MidiTrackでトラックを作り、トラックに命令を次々に追加していくイメージです。

音符の説明

note_onとnote_offで音符を追加します。
noteは音の高さを表します。60はドです。
velocityは音の強さ、大きさを表します。
timeが音を出すタイミングです。単位はティックです。デフォルトでは一拍が480ティックに相当します。
このtimeがわかりにくいです。
図で表すと次のとおりです。

0 360 120 360 120 360 120 360 120 60 62 64 65

考え方としては「timeの分だけ待って音を出す」と「timeの分だけ待って音を止める」の繰り返しです。

下は1音目のドです。
最初なので「0ティック待って音を出す」「360ティック待って音を止める」となります。

track.append(Message('note_on', note=60, velocity=64, time=0))
track.append(Message('note_off', note=60, time=360))

下は2音目のレです。
前の音の続きで「120ティック待って音を出す」「360ティック待って音を止める」となります。

track.append(Message('note_on', note=62, velocity=64, time=120))
track.append(Message('note_off', note=62, time=360))

コメント

タイトルとURLをコピーしました