前回からの続きだが、PythonによるSMFの編集加工シリーズは一旦これで終了とする。ここまでの一連の操作を経た修正後のSMFをDominoに読み込み、再生してみた結果については稿を改める。
不要メッセージの削除
前回まで放置したままであったが、Studio One から書き出したSMFに付け足される固有のメタメッセージは特に必要ではないためSMFから削除したい(下図参照)*1。
本例のように、こうした不要メッセージの位置が固定されているのであれば、リストの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')