DAW悪戦苦闘記

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

PythonでSMFを操作する (5) MIDIチャネル変更

前回の続き(注: かなりマニアックです)。今回は既存メッセージのMIDIチャネルを変更するが、要領は前回のデルタタイム修正とほぼ同じである。

daw-jones.hatenablog.com

Studio One で書き出したSMFの大きな問題

Studio One (Prime版)で Presence XT を使ってMIDI打ち込み再生した楽曲をSMFに書き出した場合、すべてのトラックのMIDIチャネルが"0"のままとなる*1

どうやら Presence XT は Kontakt のようなマルチチャネル出力に対応していないようなので、音色(概ねトラックに等しい)毎に出力MIDIチャネルを変える設定はできないと見受ける(下記チュートリアル参考)。

sleepfreaks-dtm.com

一括でチャネル値を変えるには

基本的な考え方は、デルタタイムの変更と同じで、対象トラックを構成する全メッセージの中でチャネル属性を持ったものにつき、そのチャネルの値を所望の値に置き換えるだけである。下例では、track1中のチャネルを"10"(Domino表記上はチャネル11)に変更している。

# チャネル変更のための関数
def modify_channel(track, channel):
    for msg in track:
        if hasattr(msg, "channel"):
            msg.channel = channel

# 上記関数を呼び出してチャネル修正
modify_channel(track1, 10)

実行結果は、当然ながら下記の通りとなる(冒頭メッセージのみ例示)。

f:id:daw_jones:20170722204811p:plain

*1:SMFのデータ上はゼロ・ベースの0〜15レンジ。Dominoに読み込むとチャネル1となる。