PythonでMIDIから色々な情報を取得したい
とりあえずPythonでMIDIファイルを扱えるようにするのが今回の目的です。
そもそもMIDIってどんなファイルなの?
「MIDIファイルって、そもそも何なの?」
という人は、このブログに辿り着かないと思うので、省略。
どうしても知りたい人は、以下を読めば良いかと。
www.dtmstation.com
ここでは細かい話は抜きにして
「MIDIデータとはPCが演奏するための楽譜データである」
と思っておけば、問題ないです。
さて、いるのかどうかは分からないけど、
「これからPythonでMIDIデータを扱ってみたい」という方がいたら
MIDIファイルは以下のように考えておいてくだされ。
ここで出てくる"Track"は「フォルダみたいなもの」で、それ自体は情報を持ってないです。
実際の「テンポや音程の情報」は"Message"に記述されています。
この辺のイメージがあれば、もうビビることなく触れると思うので
実際にPythonを使って読み込んでいきます。
どうやってPythonで読み込む?
PythonでMIDIファイルを扱うためには、
Midoという外部ライブラリをインストールする必要があります。
公式ドキュメントはこちら
Mido - MIDI Objects for Python — Mido 1.2.10 documentation
開発環境にもよって変わりますが、
基本的には以下2つのコマンドを実行すれば良いです。
(python-rtmidiはportを使うのに必要らしいのだけど、現時点では正直よくわかってない)
> pip install mido > pip install python-rtmidi
動作確認してみる
とりあえず、何かしらMIDIファイルを準備します。
(DAWやMuseScoreで作る、フリーのMIDIファイルをダウンロードする、...などなど)
MIDIファイルが準備できたらMidoを使って読み込んでみます。
(以下は3つの音符しか入ってない簡素なファイル"new_song.mid"を読み込んだ例)
import mido midi = mido.MidiFile("new_song.mid") print(midi)
MidiFile(type=1, ticks_per_beat=480, tracks=[ MidiTrack([ MetaMessage('set_tempo', tempo=500000, time=0), Message('note_on', channel=0, note=64, velocity=100, time=0), Message('note_off', channel=0, note=64, velocity=64, time=480), Message('note_on', channel=0, note=66, velocity=100, time=0), Message('note_off', channel=0, note=66, velocity=64, time=480), Message('note_on', channel=0, note=68, velocity=100, time=0), Message('note_off', channel=0, note=68, velocity=64, time=480), MetaMessage('end_of_track', time=0)]) ])
読み込んだMIDIファイルにもよりますが、
こんな感じでMessageが沢山表示されていれば、
正常に動作していると思います。
とりあえず、今回はMidoの動作確認ができたので終了。
次回、簡単に抜き出せそうな情報を抜いてみる予定です。