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)
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ファイルは次のとおりです。
MIDIファイルをWAVファイルに変換しました。
基本の説明
変数は次のとおりです。
bpmでテンポを指定します。
programで音色を指定します。41はバイオリンです。
fn_midiで生成ファイル名を指定します。
MidiFileでMIDIファイルを作って、MidiTrackでトラックを作り、トラックに命令を次々に追加していくイメージです。
音符の説明
note_onとnote_offで音符を追加します。
noteは音の高さを表します。60はドです。
velocityは音の強さ、大きさを表します。
timeが音を出すタイミングです。単位はティックです。デフォルトでは一拍が480ティックに相当します。
このtimeがわかりにくいです。
図で表すと次のとおりです。
考え方としては「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))
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))
track.append(Message('note_off', note=62, time=360))
[ 2023年9月21日 | カテゴリー: Python | タグ: Mido , 入門 ]
« 「ドカベン」四天王の身長 | 岐阜県の結婚式場で食中毒 »
コメントを残す