Windows版MIDICONV説明書(MCW.EXE)
ループ演奏を目的とする、主として、ゲームのBGM等に利用するMIDIファイルの曲長を調整し、最適化するのと同時に、幾つかの変換機能を搭載しました。デフォルトで、起動時にtest.midを読み込みますが、目的のMIDIファイルを、開いたウインドウにドロップする事で、変換元のファイルを変更出来ます。

画面説明

↑クリックで拡大表示します。
注:画像は、V1.9.2時のものです。
外観が、若干異なる場合もあります。
  • [Analysis Report]の窓は、読み込んだファイルの解析結果を表示しますが、解析結果が大きい場合は、ログファイルに出力するので、そちらを参照して下さい。
  • [Output File]の窓は、コンバート結果のファイル名(出力ファイル名)を指定します。デフォルトで、out.midが指定されていますが、直接編集するか、からファイルを指定して、出力ファイルを決定して下さい。
  • [Length]の窓は、調整する曲長を指定します。読み込み後に、表示される値は、推奨値ですが、直接編集も出来ます。通常480で4分音符1個の長さなので、4小節だと、7680となります。
  • ボタンで、出力ファイル名のファイルに出力を行います。
  • [DETECT Lv?]で、調整最適化のレベル(詳細は後述)の選択を行います。
    [No Time Det]にて、曲長の調整を無効にできます。Optionの結果だけを反映させたい場合に選択して下さい。これを選択すると、DETECT Lvの選択は無効になります。
  • ボタンにて、チャネル毎の変更が可能です(詳細は後述)。
  • ボタンで、変換した場合の試演奏を行います。
  • の操作についても後述します。
Option設定機能

↑クリックで拡大表示します。

Option設定で、以下の操作が可能です。
  • CH毎のVelocity(ボリューム)オフセットが、−64〜+63の範囲で指定出来ます。
  • CH毎の楽器指定が、変更出来ます。
  • CH毎(リズムパートを除く)のオクターブ上下(±1のみ)が可能です。

選択したら、ボタンで確定して下さい。
ボタンで、設定値を、読み込み時の値に戻します。
キャンセルする場合は、です。
DETECT Level
DETECT Lv(level)は、以下の最適化を選択します。
  • level=0
    • 基本的に、音のON/OFF以外のデルタタイムは0とします。その上で、曲の最後(End of Track)を小節の切れ目若しくは、指定された値に合わせて調整します。

  • level=1
    • MIDIファイルを、SPFコンバータに渡す場合、音数を減らす為の施策,MIDIシーケンサによっては、間隔が無く、連続する2音については、前音停止の前に、後の音の発音が定義されてしまっている場合があるので、同タイミングの発音,消音イベントがある場合は、これをバッファリングして、OFFを最初に行う様に調整します。
    • 殆ど効果無しですが、MIDIシーケンサによっては、1920(1小節目の終わり=2小節目最初)に、4/4拍子を、再設定している部分が有るので、これを削除します。
    • ループ時の音途切れに関する施策
      最終音が、32分音符の場合、SPFファイルに変換すると、音OFFと同時にプログラムチェンジが走る為、最終音の余韻部分が潰れます。また、これを回避する為に、プログラムチェンジを、トラックの最後のタイミングに行うと、今度は、ループの前後の繋がりに、 若干の違和感が生じる事があり、両者を回避する為、プログラムチェンジを若干遅らせる施策を入れています。

  • level=2
    • level=1の内容に加え、ランニングステータスの調整(前回が0x9nで、今回が0x8nの場合)を、最適化し、MIDIサイズの節約を行います。

MIDI<-->TEXT
は、MIDIファイルのフォーマットに関して、若干の知識は必要となりますが、MIDIファイルに対する細かい操作を、テキストエディタで行える様にする為の施策です。コンバータで手の届かない部分について、変更を掛けたい場合、一旦、テキストファイルに落とし、編集した結果を、MIDIファイルに戻すという操作を可能にします。バイナリエディタで編集するのは、ちょっと…という場合に、何とかしてくれるインタフェースとして、定義しました。
テキストファイルは、後述のフォーマット(イベントテキストファイル)に乗っ取っていれば、外部で編集したTEXTをMIDIに変換も出来るので、外部ツールとのインタフェースとしても利用出来ます。
  • で、現在ロードしているMIDIファイルを、選択したTEXTファイルに出力します。
  • で、選択したTEXTファイルを、MIDIファイルに変換して出力します。尚、[Load after Cvt]をチェックしておくと、変換結果が、MIDIファイルとしてロードされます。

イベントテキストファイル
-H:MIDI-EventFile
+F:00 01 # MIDI-Format
+N:00 02 # Track-Number
+D:01 E0 # DTime
-T:84
# Track #0 ----
------0:FF 03 08 55 6E 74 69 74 6C 65 64
    
------0:FF 51 03 07 A1 20
# --- tempo ---
---1920:FF 58 04 04 02 18 08
------0:FF 2F 00
-TE
-T:176
# Track #1 ----
----180:B0 79 00
    
    …
----480:90 O5E 64
# -- 960 --
------0:90 O5D 00
----480:90 O5F 64
# -- 1440 --
    
    …
----480:C0 00
------0:FF 2F 00
-TE
フォーマット
  • 先頭行
    先頭行は、-H:MIDI-EventFile[CR]しか許されません。これ以外では、変換は為されません。

  • ヘッダ情報
    トラック情報が始まる前に、以下のヘッダ情報を記載します。記載されていなければ、正常に変換されません。
    • +F:に続けて、MIDIフォーマット形式(0,1,2)を、16進数2桁(1バイト単位)で2バイト記載します。
    • +N:に続けて、トラック数を16進数で2バイト記載します。
    • +D:に続けて、4分音符の分解能(通常480)を、16進数で2バイト記載します。

    ※+F:,+N:,+D:は行頭から始まって居る事が条件です。
    ※以降、トラック情報でも同様ですが、16進数の部分は、Byte単位で、空白を空ける,空けない,または、間に複数の空白を挟んでも認識出来る仕様ですが、1バイト分2桁の16進数字を離して書く事は出来ません。尚、リズム楽器の短縮名,MML表記を使う場合は、前後にスペースを空けないと、誤認識されるケースがあります。

  • トラック情報
    • トラック情報は、-T:〜-TE行の間に記述します。-T:に続けて、トラックのサイズを10進数にて記述しますが、変換される際のデータ長は、Trackデータを作成する途上で、自動で計算されるので、キッチリ書く必要はありません。但し、このデータを元に、Track作成用のメモリを確保するので、若干余裕を持った値を記述した方が安全です。
    • トラック内は、1行に1個のイベントを記述します。
    • イベントは、最初にデルタタイムを10進数で記載しますが、必ず7桁で、右詰で 記述して下さい。
    • 8桁目は、必ずコロン(:)として下さい。
      イベントであるか否かの判断は、8桁目に':'が有るか否かで判断しています。コンバータが吐き出すイベントテキストでは、'#'が、あたかもコメントの様に扱われていますが、'#'以降が必ずコメントではありませんので、注意してください。
    • イベントの本体を、これ以降に、16進数で記述します。
      16進数でイベントの桁数(デルタタイプを省いた部分)分の16進数を記述して下さい。バイト数が不足,余分な記述が有った場合は、正しく変換出来ませんので、イベント行本体への余分な表記は避けて下さい。但し、以下の簡易表記は許されています。
      • テンポ指定
        テンポの指定では、!に続けて、10進数での指定が出来ます。
        左記の例では、
           0:FF 51 03 07 A1 20
        の代わりに、
           0:!120
        の様に指定が可能です。
      • リズム楽器の短縮名表記
        リズムパート(CH=9)の楽器指定には、ESN(Electric Snare),LFT(Low Floor Tom)等の短縮名を利用する事が可能です。この記述は、小文字でも可です。
      • 音符のMML表記
        リズムパート以外の音程指定は、O5E,O4C#等の、MML記述が使用出来ます。オクターブを指定する、'O'は、小文字を使用出来ますが、音程を示すA〜Cの文字は、小文字にすると、半音上げ(#)を指定したものとして扱われます。O3G+は、O3G#と同様,O3Gb,O3G-は、フラットを示します。

  • 注釈(コメント)
    上記のフォーマットに合わない部分は、読み飛ばされるので、必然的にコメントとなります。ヘッダ部分では、先頭行に-,+等が無い事,トラックデータ内では、行の8桁目に、(:)が無い事で、注釈行として扱う事が出来ます。尚、ヘッダデータでの、16進数2バイト後は、必然的に注釈になります。


上記は、出力されたファイルの一例です。













制限事項
  • 全部のMIDIタイプに対応はしていません。するつもりも無いです。
  • 特定のMIDIシーケンサの吐き出すMIDIファイルに合わせてあるので、その他のシーケンサのデータに合うか否かは不明です。
  • 一旦変換したファイルを、再度変換した場合の保証はありません。
  • Trackが(楽器1個)+(打楽器1個),4/4拍子,4小節の曲でしか試してません。
    あと、分解能は480しか試してません。(多分、他のは無いのでは??)
  • 基本機能としてMIDIデータ中の下記部分を調整します。
    • コンダクタトラック(1個目のTrack)の、4/4拍子指定に、何故かデルタタイムが480の部分が有る場合があるので、デルタタイムを0に設定
    • もう一個、1920(1小節の切れ目)で、4/4拍子を設定している奴が居るが、こちらは、訳分からないので無視(現状問題無いが・・・)→DETECT Lv=1で対応した。 ※最初の480で4/4指定は、SetUp用に、まず、1/4調子で4分音符1個分(480)の時間を確保している為と思われるので、1/4調子の設定も、本来は不要です。削除の対象としました。
    • コンダクタ以外のトラックで、音符が始まる前に、初期設定等が、合計480(180+60+60+60+60+60)入っているので、これを全て0に調整
    • コンダクタ以外のトラックで、音符の終了から、1個前に、CHの音を元に戻す設定が入っているが、これがデルタタイム480を食っているので、0に調整
    • コンダクタ以外のトラックにて、解析時に算出した、一番音符の部分が長いトラックに合わせ、End of trackの部分で、曲長を調整する。DETECT Lv=1以上で、更に微調整が入ります。
      尚、デフォルトでは、ヘッダのDeltaTime分解能(通常480)で割り切れる数に調整しているので、丁度、4分音符の切れ目で終わりますが、マニュアルで調整が必要であれば、オプションで、デルタタイムを設定出来ます。


資料等