java hcmmlj [<options>] <target.fr> <input.mml>
<target.fr>には出力するリソースファイル名を、 <input.mml>には入力するMMLファイル名を指定します。 拡張子まで省略せずに指定して下さい。
<options>には以下のものが指定できます。
★★ 注意 ★★
出力ファイル名を先に指定します。これは、以前のhcmmlと
逆になっているので注意して下さい。
将来、hcmml.exe(C言語版)もこの順番に変わります。
(例) java hcmmlj pack.fr input.mml
input.mmlをコンパイルしてpack.frに出力する
#n
トラック指定(n=0,1,2,3)
この行にトラックnのスコアデータ(演奏データ)が書かれていることを示します。
トラックnはWonderSwanのPCMチャンネルnで演奏されます。
#pack ...
リソースパックのコメント文
リソースパックにコメントを付けます。
#score n ...
スコア番号 [スコアのコメント文]
スコア番号を指定して新しいスコアの記述を開始します。コメントも
付けられます。
この行を省略していきなりトラック指定行から始めた場合、スコア番号0
のスコアが開始したものとみなされます。
@n ...
波形定義
波形を定義します。
@An ...
音量エンベロープ定義
音量エンベロープを定義します。
@Pn ...
音程エンベロープ定義
音程エンベロープを定義します。
CDEFGAB[+|-][n|%n][.*]
音符
音符を鳴らします。CDEFGABがドレミファソラシに対応します。
+を付けると半音上げ、-を付けると半音下げます。
数値を付けると音長指定になります。例えばC4は4分音符のドです。
%に続いて数値を書いた場合は絶対音長指定になります。
これは全音符を%192として、音符の継続時間を表したものです。
2分音符が%96、4分音符が%48…となります。
.(付点)を付けると音長の1/2を元の音長に加算します。以下、
付点を増やすごとに元の音長の1/4,1/8,1/16…を加算していきます。
R[n|%n][.*]
休符
指定した長さだけ休みます。
休符中は完全に発音が止まります。前の音符のリリース音が終わって
いなくても即座に打ち切ります。
W[n|%n][.*]
ウェイト
指定した長さだけ何もせずに待ちます。前の音符のリリース音が
終わっていなければそのまま鳴り続けます。
Tn
テンポ(n=6..1494あたり)(あまり無茶な値にしないで下さい)
曲のテンポを指定します。曲中で変更することもできます。
Ln[.*]|L%n[.*]
デフォルト音長
音符/休符で音長指定を省略したときの音長を設定します。
デフォルト音長のデフォルト値は4(=%48)です。
Qn
音長比(n=1..8)
音符の継続時間に対する、実際の発音時間の比を指定します。
発音時間は、継続時間のn/8になります。
On
オクターブ(n=1..8)
オクターブを指定します。デフォルトはO4です。
<>
オクターブ移動
オクターブを移動します。<で1つ下がり、>で1つ上がります。
Vn
音量(n=0..15)
音量を指定します。デフォルトはV13です。
V~n
相対音量(n=-15..15)
音量を相対的に変化させます。
()
相対音量
音量を相対的に変化させます。(で1つ下がり、)で1つ上がります。
Pn
パンポット(n=-15..0..15)
パンポットを指定します。
P~n
相対パンポット(n=-30..30)
パンポットを相対的に変化させます。
\n
ディチューン(n=-2399..2399)
ディチューン量を指定します。半音の1/25単位で指定できます。
デフォルトは0です。
※音源自体の精度の限界から、指定したディチューン量と
実際に発音される音がかなり食い違うことがあります。(特に高音部)
\~n
相対ディチューン(n=-4798..4798)
ディチューン量を相対的に変化させます。
Sn
ピッチシフト(n=-2047..2047)
ピッチシフト量を指定します。サウンドBIOSのSOUND_SET_PITCHに
与えるピッチをこの値だけずらします。\nのディチューン量とは
独立に扱われます。
S~n
相対ピッチシフト(n=-4094..4094)
ピッチシフト量を相対的に変化させます。
@Nn
チャンネル3ノイズ設定(0..7、それ以外の値でノイズなし)
PCMチャンネル3のノイズモードを設定します。
@n
波形切り替え(n=0..31)
波形を切り替えます。
@An
音量エンベロープ切り替え(n=0..31)
音量エンベロープを切り替えます。
@Pn
音程エンベロープ切り替え(n=0..31)
音程エンベロープを切り替えます。
[n ...]
ループ(0(=無限)..255回ループまで、省略値2、ネストは3重まで)
[と]で囲まれた中を繰り返します。
繰り返す回数は[の後に指定します。0を指定すると無限ループになります。
回数を省略すると2回とみなされます。
ループの入れ子(ネスト)は3重までできます。
ループ中には必ず音符(あるいは休符/ウェイト)を入れて下さい。
空ループを作るとドライバがハングアップします。
/
ループ脱出
ループの最後の繰り返し時に、ループの外へ抜けます。
※ループ回数が1回のとき(使うことは少ないと思いますが)は、/コマンドは
使用しないで下さい。暴走します。
※上記コマンドの中で、名前に「相対」とつくものはループ中で
正しく(相対的に)動作します。
<>のオクターブ移動コマンドは、コンパイル時に音程が
固定されてしまいます。ループ中で使う場合は気をつけて下さい。
(そのため、「相対オクターブ」という名前にしていません。)
エンベロープは、音符が発音されてからの時間経過とともに
音量/音程を変化させる機能です。
Humming Catでは、エンベロープの時間単位(ステップ)は曲のテンポや
演奏スピードに関わらず一定(1/75秒)です。
音量エンベロープは、Qnで指定される発音時間内の部分(メイン部)
と、それが過ぎてから次の音符に移るまでの間の部分(リリース部)
に分かれます。
SoundILと異なり、メイン部とリリース部で処理そのものに違いは
ありません。発音時間が終わる(キーオフされる)とリリース部
へ移行するというだけです。
また、一度音量が0になっても、それから音量を上げるようなエンベロープ
を指定すれば再び音が鳴り出しますので注意して下さい。
使用するコマンドは、一部を除いてスコアデータ内と同じ動作です。
★★音量エンベロープで使用できるコマンド★★
Vn, V~n, (, ), Pn, P~n, Wn, [n ...], |
Vn, V~nは自動的に1ステップのウェイトがかかります。
P~nの相対パンポットは-15〜15までになります。それ以上動かし
たい時(あまりないと思いますが)は、2つ続けて指定して下さい。
Wnはエンベロープの処理ステップ単位(1〜1023)です。
[n ...]は0(無限回)または2〜1023回です。
|はメイン部/リリース部の区切りを表します。
※ループ内には、必ず時間待ちを行うコマンド(Vn/V~n/Wn)を
入れて下さい。無い場合はドライバがハングアップします。
★★音程エンベロープで使用できるコマンド★★
\n, \~n, Sn, S~n, Wn, [n ...]
\n, \~nは自動的に1ステップのウェイトがかかります。
Wnはエンベロープの処理ステップ単位(1〜1023)です。
[n ...]は0(無限回)または2〜1023回です。
※ループ内には、必ず時間待ちを行うコマンド(\n/\~n/Wn)を
入れて下さい。無い場合はドライバがハングアップします。
※エンベロープ定義は、長くなっても1行に続けて書いて下さい。 複数行にまたがる定義は今のところできません。