サウンドドライバ 'Humming Cat' for WonderWitch

Java版MMLコンパイラ hcmmlj
必要なもの
使い方
MMLの書式

◎必要なもの

Javaランタイム環境が必要です。コンソール版のJavaインタプリタが 動くことを確認しておいて下さい。
作者の環境はj2sdk1.4.0ですが、もっと前のバージョンでも動くかも 知れません。もし動かない場合はj2sdk1.4.0(あるいはj2re1.4.0)の 環境で試してみて下さい。

◎使い方

DOSプロンプトなどから実行します。
java hcmmlj [<options>] <target.fr> <input.mml>

<target.fr>には出力するリソースファイル名を、 <input.mml>には入力するMMLファイル名を指定します。 拡張子まで省略せずに指定して下さい。

<options>には以下のものが指定できます。

-Fnと-Enについては、あくまで「想定する」演奏環境の指定です。 実際にその通りの環境で演奏されるとは限りません。(現状では 無視されます。)

★★ 注意 ★★
出力ファイル名を先に指定します。これは、以前のhcmmlと 逆になっているので注意して下さい。
将来、hcmml.exe(C言語版)もこの順番に変わります。
(例)  java hcmmlj pack.fr input.mml
input.mmlをコンパイルしてpack.frに出力する


◎MMLの書式

Humming CatのMMLでは、各行ごとに処理が行われます。1行の長さの 制限はありません。
アルファベットの大文字・小文字は区別されません。
スペースやタブは無視されます。
行の種類
コメント
スコアデータ
波形定義
エンベロープ定義

=== 行の種類 ===

行頭を見てその行の種類を判別します。現在使えるのは 以下のものです。

#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回のとき(使うことは少ないと思いますが)は、/コマンドは 使用しないで下さい。暴走します。

※上記コマンドの中で、名前に「相対」とつくものはループ中で 正しく(相対的に)動作します。
<>のオクターブ移動コマンドは、コンパイル時に音程が 固定されてしまいます。ループ中で使う場合は気をつけて下さい。 (そのため、「相対オクターブ」という名前にしていません。)


=== 波形定義 ===

行頭の@nに続けて、波形のサンプル値を16進数で表したもの (0〜9,a〜f)を32個、順番に並べます。

=== エンベロープ定義 ===

エンベロープは、音符が発音されてからの時間経過とともに 音量/音程を変化させる機能です。
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行に続けて書いて下さい。 複数行にまたがる定義は今のところできません。


戻る