DAW悪戦苦闘記

DAWやMIDIを通じてちまちまとDTMを楽しむ記録+MIDI検定1級到達記

PythonでSMFを操作する (7) 不要メッセージの削除とファイル保存

前回からの続きだが、PythonによるSMFの編集加工シリーズは一旦これで終了とする。ここまでの一連の操作を経た修正後のSMFをDominoに読み込み、再生してみた結果については稿を改める。

daw-jones.hatenablog.com

不要メッセージの削除

前回まで放置したままであったが、Studio One から書き出したSMFに付け足される固有のメタメッセージは特に必要ではないためSMFから削除したい(下図参照)*1

f:id:daw_jones:20170722220059p:plain

 

本例のように、こうした不要メッセージの位置が固定されているのであれば、リストのpopメソッドを使って容易にピンポイントで削除できる。ここでは2番目のメタメッセージを削除する(インデックスはゼロ・ベースなので"1"を指定)。

# 2番目のメッセージを削除する
track1.pop(1)

 

固定位置でない場合は、例えばメッセージ・タイプで特定する(msg.type == 'sequencer_specific' というような条件で絞り込む)などして消去することになろう。ただし、全メッセージを上から下までスキャンするため処理効率は悪くなる。

編集後SMFオブジェクトのファイル保存

SMFオブジェクトは、ファイル書き出し保存のためのsaveメソッドを持つ。したがって、これを呼び出すだけで書き込み完了となる。

なお、ファイル・フォーマット種別はデフォルトではSMFオブジェクトが持つtype属性をそのまま引き継ぐ*2。Studio One から書き出したSMFはタイプ1なので、通常は特に指定しなくともタイプ1を継承して保存される。

# SMFオブジェクトmidをファイル名'smf_studio1_edited.mid'に保存する
mid.save('smf_studio1_edited.mid')

*1:MIDI検定では審査対象にならないのでそのまま放置しても別に問題はない。

*2:SMFオブジェクトの属性については過去記事を参照。