MCMX1.exe

提供: JUDStyle
2018年1月17日 (水) 20:01時点におけるJud (トーク | 投稿記録)による版 (旧wikiから移動)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

MCMX1.exeは、PMDMX1.exe/PMDMX0.exe向けデータ作成を行うためのコマンドラインMMLプリコンパイラ/シェル。

機能概要

マルチモジュールPMDであるPMDMX1.exeが2個のPMD演奏ファイルをロードできるため、2個のPMD演奏ファイルを1個のMMLファイルから作成するためのツール。

  • コンパイルにはMC.exeが必要。
  • MML記述方式は基本的にPMD4.8系に準じる。MML定義によっては一部拡張された記述が可能。
  • PMDモジュール毎に個別のPCMファイルを読み込むことが可能。
  • プリコンパイルしたMMLファイルはMC.exeに引き渡され、コンパイルまで実施する。

書式

MCMX1.exe [filename] [options]
filename
プリコンパイルするファイル名を指定する。
options
MC.exeへ引き渡すオプションを記述する。MCMX1.exeはこれらoptionsを使用せず、すべてMC.exeへ引き渡す。

options

-L
MC.exeのログをMCMX1.logにリダイレクトする。
-W
指定されたファイルを監視し、ファイルに対する変更が行われるたびに再度コンパイルする。Ctrl-Cで停止する。

V1.31より、コマンドライン引数が一つもない場合は、対話モードで起動する。対話モードで何も入力せずにEnterを押下した場合は、何もせずに終了する。

生成ファイル

MCMX1.exe inputfile.mml

MMLを上記書式でプリコンパイルした場合、以下の様に2個のファイルが出力される。

inputfile_MX1.mml
inputfile_MX2.mml

さらに、これらファイルは直接MC.exeに引き渡され、以下の様に2個のファイルがコンパイルエラーが発生しなければ出力される。

inputfile_MX1.mz
inputfile_MX2.mz

MCMX1.exeに渡したファイル内に、#2ndMMLで設定したMMLファイルがある場合は、以下のようにファイルが出力されるようになる。

inputfile_MX1.mml
inputfile_MX2.mml
inputfile_MX3.mml ←#2ndMMLによる追加ファイル
inputfile_MX4.mml ←#2ndMMLによる追加ファイル
inputfile_MX1.mz
inputfile_MX2.mz
inputfile_MX3.mz ←#2ndMMLによる追加ファイル
inputfile_MX4.mz ←#2ndMMLによる追加ファイル

MML書式

特に断り書きがない限り、MC.exeの定めるMMLフォーマットで書くことができる。

  • ch定義文字は、大文字がモジュール1で、小文字がモジュール2に割り当てられる。モジュール2で使用する小文字は、PMDが定めるch定義文字をそのまま小文字にしたものが割り当てられる。
  • PPZ/FM3ch拡張パートで使用可能なch定義文字は、後述の通りそれぞれ STUVWXYZ / LMN のみが使用可能。モジュール2では stuvwxyz / lmn を使用する。

MCMX.exe独自の定義行

#MXFile
MC.exeに渡すMMLのほか、独自形式のMX0ファイルも生成する。
#QuickStart
MX0ファイル経由で、PMDMX0.exeに即時演奏するよう指示する。パラメータはない。
#WaveFile
MX0ファイルを使用する場合に有効。
PMDMX0.exeが生成するWAVファイルの名前を設定する。
#RhythmDir
#RhythmDir1
#RhythmDir2
MX0ファイルを使用する場合に有効。
PMDMX0.exeが使用する、RHYTHM音源用PCMファイルを格納したディレクトリ名を設定する。数字を付けた場合、その番号のモジュールのみに適用される。
#JumpStart
MX0ファイルを使用する場合に有効。
演奏データの先頭から、演奏開始までスキップする時間を秒単位で設定する。
#RecordLen
MX0ファイルを使用する場合に有効。
演奏する時間を秒単位で設定する。
#MXMML1
MML定義をMX1型に拡張する。後述。
#2ndMML
V1.31より有効で、3番目と4番目のモジュールに読み込ませるMZファイルを作成するMMLファイル名を指定する。ここで指定されたファイル自体が#2ndMMLで呼び出されたファイルである場合、これを無視する。全体的なMML記述形式自体はどちらも同じで、#2ndMMLにより読み込まれたファイルの大文字パートは第3モジュール、小文字パートは第4モジュールに割り当てられる。

MML拡張

MML定義として #MXMML1 を定義した場合、以下の通りMMLが拡張解釈される。

行連結
先頭がtab文字で開始される行のうち、以下の条件のいずれかに該当するものは、前行の続き(以降、MML従属行と呼称)とみなされる。
  1. 前行が、ch定義文字で始まるMML定義行である場合。
  2. 前行が、MML定義行に続いているMML従属行である場合。

以下にその例を示す。2行目の先頭はタブ文字が入力されているものとする。

ABC t120l4cegc
    l8cdefgabc

上記例のMMLをプリコンパイルした場合、出力されるMMLには以下の通り出力される。

ABC t120l4cegc
ABC l8cdefgabc

なお、MML従属行は先頭にタブ文字があればMML定義行のch定義を引き継ぎ続ける。

PCM定義

PCM定義は、モジュール毎に設定することができる。

/* inputfile.mml */
#PCMFile  pcmgt01.pvi
#PCMFile2 909.pvi

上記のように定義されたMMLをプリコンパイルすると、出力されるMMLには以下の通り出力される。#PCMFile は後着優先なので、この場合の inputfile_MX2.mml において使用されるPCMファイルは 909.pvi となる。

/* inputfile_MX1.mml */
#PCMFile  pcmgt01.pvi
/* inputfile_MX2.mml */
#PCMFile  pcmgt01.pvi
#PCMFile  909.pvi

モジュール毎に指定できるPCM定義対象は以下リストの通り。

  1. PVIFile
  2. PCMFile
  3. P86File
  4. PPCFile
  5. PPZFile
  6. PPSFile

無為行の処置

プリコンパイル前後のMMLファイルにおける行番号については以下の通り。

MC.exeがコンパイルエラーを発した際に行番号が出力される。この番号をプリコンパイル前のMMLファイルと対応付けるため、後述する末尾への #MEMO 定義挿入処理以外に付いては、行の挿入・削除を行わない。特定モジュールのみに有為な行が存在した場合、その行の処理を何も行わない側のMMLには、空行が出力される。
また、行頭が#または英字で開始されておらずMML従属行でもない場合、その行は加工することなくそのまま出力される。コメント行・改行のみの行・FM音色定義行等がこれに該当する。

制限事項

  • #PPZExtend で指定できる文字は STUVWXYZ のみ。これ以外の如何なる文字を指定しても、プリコンパイル時に上書きされる。
  • #FM3Extend で指定できる文字は LMN のみ。これ以外の如何なる文字を指定しても、プリコンパイル時に上書きされる。
  • プリコンパイル終了時に、MMLの末尾に以下の通り #MEMO 定義が挿入される。xxxx は MCMX1.exe のバージョンが、n にはモジュール番号が出力される。
#MEMO Pre-Compiled by MXMC1.exe Ver.xxxx, to Module n.

注意事項

  • MCMX1.exe内にてVisualC++6のシステムコールsystemを使用しているため、監視しているアンチウィルスソフトによっては警告メッセージが発せられる可能性がある。

履歴

historyを参照。

Download