Pythonで楽譜を扱うのが面白いです。ABC記譜法であれば、楽譜を「文字」として扱えるのでPythonだと比較的にラクに処理できます。ただ、楽譜のインプットやアウトプットのことを考えるとMIDIファイルを扱えるようにしたほうが便利なように思えます。
pretty_midiを使う
PythonでMIDIを扱う場合、パッケージ『pretty_midi』をインポートすれば良さそうです。MIDIファイル内のトラックごとに、ノートをリストとして取得できるようになります。
インストールはpipコマンドだけで済むのでラクチン。
pip install pretty_midi
MIDIを読み込む
PrettyMIDI()でファイル名を指定すれば、あとはトラックとノートがリストで取得できます。
import pretty_midi # MIDIファイルのロード midi_data = pretty_midi.PrettyMIDI('test.mid') # トラック別で取得 midi_tracks = midi_data.instruments # トラック1のノートを取得 notes = midi_tracks[0].notes for note in notes: # ベロシティー、ノートナンバー、 # ノートオンタイム、ノートオフタイム # の順でノート情報が渡される print(note)
pretty_midiを使うときに注意しなければいけないのは次の事項でしょうか?
- 基本的にTickではなく、時間で位置が管理されている
※Tickへ変換するメソッドが用意されている - 楽曲開始位置はアーフタクトが考慮されていない
- 分解能は480Tickへ変換される
ABC記譜法では存在していた休符情報がMIDIでは在りません。機械学習で休符情報も欲しい場合はロケーションの差分を求めて、擬似ノートを置いてあげる必要がありますね。