「MCMX1.exe」の版間の差分
(旧wikiから移動) |
(相違点なし)
|
2018年1月17日 (水) 20:01時点における最新版
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従属行と呼称)とみなされる。
- 前行が、ch定義文字で始まるMML定義行である場合。
- 前行が、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定義対象は以下リストの通り。
- PVIFile
- PCMFile
- P86File
- PPCFile
- PPZFile
- 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を参照。