VGMTransコーディングメモ - 基礎・シーケンス変換の初歩

VGMTransはゲーム音楽MIDIやDLSに変換可能なGUIツールです。多種多様なフォーマットに対応しているのが本ツールの特長のひとつです。ソースコードには多様な状況に簡単に対応するための便利な機能が多く含まれています。

プログラマはアドオンを開発するような要領で、VGMTransのサポートファイル形式を拡張することができます。MIDIファイル出力、DLSファイル出力、GUI等の機能はすべてVGMTransに備えられています。プログラマはそれらのおかげで本当に必要なコーディングだけに注力できます。そして、ツールの利便性を向上させ、不要なコーディング時間を短縮することができます。

しかしながら、想定される入力が多様であるため、VGMTransの構造も幾分複雑です。本書の目的は、VGMTransの基本的構造を記載し、より多くの開発者によるVGMTransの拡張を可能にすることにあります。

本書は VGMTrans_src_and_bin_9_29_09 を対象としており、内容が以降のバージョンに適合することは保証しません。

ファイル・コンテナ類

主要な基底クラス類はおよそ下記の通りです。

Loader *

Format *
  L Scanner *
  L Matcher

VGMColl * (→MIDI and DLS)
  L VGMSeq * (→MIDI)
    L SeqTrack *
      L SeqEvent
  L VGMInstrSet * (→ DLS)
    L VGMSampColl * (→ WAVs)
      L VGMSamp * (→ WAV)
    L VGMInstr *
      L VGMRgn

 * You may need to make a derived class.

それぞれのクラスの役割は下記の通り。必要に応じて派生クラスを作成して使用します。

Loader
アーカイブされた入力ファイルを展開する。既存にPSF1Loaderなどがある。
Format
すべての頂点。主にScannerとMatcherを集約したクラス。新しいフォーマットに対応するには派生クラスの作成が必須。
Scanner
入力ファイルから対象シーケンスやインストゥルメントセットを検索するクラス。派生クラスの作成が必須。
Matcher
適切なVGMSeqとVGMInstrSetを関連付けてVGMCollを作成するクラス。主要なMatcherは用意済みのため、派生クラスの作成は通常必要ない*1
VGMColl
VGMSeqとVGMInstrSetを集約したクラス。楽曲の譜面と音色の組。
VGMSeq
楽曲の譜面。1つ以上のSeqTrackを持つ。譜面は楽曲の要なので、派生クラスの作成が実質必須。
SeqTrack
トラック。1つ以上のSeqEventを持つ。フォーマット固有の状態変数を保持するために派生クラスを作成することが多い。
SeqEvent
イベント。多くの派生クラスが SeqEvent.cpp に定義されており、SeqTrack を通じて利用可能である。通常新しい定義を増やす必要はない。
VGMInstrSet
楽曲のインストゥルメントセット。VGMSampCollとVGMInstrを集約したクラス。
VGMSampColl
波形サンプルの集合体。複数のVGMSampを持つ。波形アーカイブもしくはテーブルに相当する。
VGMSamp
単一の波形サンプル。時にはPCM、時にはADPCM、時にはBRRなどであり得る。
VGMInstr
単一の楽器。単一のバンク番号、楽器番号、及び1つ以上のVGMRgnを集約したクラス*2
VGMRgn
単一の音色定義。音量、ピッチ、ADSR、キーレンジ、ベロシティレンジ等の情報を持つ。

また、これ以外の要素を新しく必要とする場合、VGMContainerItem の派生クラスとして作成することができます(例:NinSnesSection)。

譜面をMIDIデータに変換したいときは、少なくとも Format、Scanner、及び VGMSeq の派生クラスの作成を要します。

*1:ちなみに、Matcherを使用しなくてもScanner内部等でVGMCollを組み立てることは可能。

*2:キースプリットされたインストゥルメント、リズムキットは2つ以上のVGMRgnを持つ

Read more