読者です 読者をやめる 読者になる 読者になる

ごちゃログぴこっ

はなまるデジタル創作紀行(DTM、TAS、いろいろな技術)

MIDIトラック分割ツール「MidiSplit」を作りました

音楽 技術

MidiSplit project page (Download) - Divide MIDI track by channel number & program number

MIDIファイルを読み込んで、楽器ごとにトラックを分割するツールを作りました。ツールの概要ですが、下記の画像をご覧ください。

MidiSplit は主にチャンネル数を制限したシーケンスの再配置に有効です。チャンネル数を節約しているシーケンスでは曲中でプログラムチェンジを送ることで、1チャンネル(1トラック)で複数のパートを演奏していることがあります。そのようなシーケンスをアレンジしようとする場合、パート(楽器)ごとに閲覧や調整ができたほうが便利ですが、プログラムチェンジが頻繁に配置されている場合は分割するのに手間がかかります。

MidiSplit はトラックに混在する各パートの演奏を手早く楽器ごとに分割します。

仕様および注意点

  • MidiSplit は各トラックを先頭から走査し、チャンネル番号とプログラム番号とバンク番号を基準に演奏内容を分割します。
  • トラック分割は、プログラムチェンジを基準に行われます。このとき、プログラムチェンジの前に出現したチャンネルメッセージ(ノート類を除く)も同時に新規トラックへと移されます。
  • SysExなどチャンネルメッセージ以外のメッセージは、先頭の分割後トラックに格納されます。
  • ドラムチャンネルの区別はしておらず、チャンネル10でも他のチャンネルでも同様に動作します。
    • v1.2 で -sp というオプションを追加、ノート番号別に特定のチャンネルや楽器を分割できるようになりました。
  • バンク変更はプログラムチェンジ受信時に反映されるものとして扱います。
  • 16チャンネル以上のMIDIデータには正式対応はしていませんが、メタイベント0x21は分割後トラックすべてに出力するようにしてあるため、同イベントを用いたフォーマット1のMIDIデータであれば、おそらく問題なく処理することが可能です。
    • 不具合がありましたが、v1.2 で修正しました。