MMLリファレンス

Last-modified: 2023-01-02 (月) 22:00:03

書式の基本

数値の扱い

パラメータとして扱う数値は以下の規則に則って処理されます。

  • 0~9 及び a,b,c,d,e,fの頭に"$"もしくは"x"があると16進数表記と見なされます。
  • 0,1の頭に"%"があると2進数と見なされます。例外有り
  • 上記以外は10進数とみなされます。

音長の扱い

  • 音長表現
    音符、休符に付随する<len>音長表現は以下の3種類があります。
  • 音楽的音長:n分音符の数値、および"."(付点音符)
    全音符や2分音符等の楽譜表記の音長です。
    全音符は1、2分音符は2、16分音符は16というようにあらわします。
    また数値の後に"."をつけると、符点音符になります、これは音長に半分の長さが加算されます。
    "."は複数指定可能です。
    4... = 4分音符+8分音符+16分音符+32分音符
  • カウント音長:%数値
    全音符を192カウントとして、音長を計算します。
    192の半分の96なら2分音符と同じ長さに、さらに半分の48なら4分音符と同じ長さになります。カウント音長を記述するときは数値の頭に"%"を記述します。(このため音長表記では2進数は表記できません)
  • フレーム音長:#数値
    1/60秒を基準とした音長です。この表記はテンポも関係ありませんので通常使用するとチャンネル間のテンポが狂う可能性があります。
    使用する際はその部分に注意して使用してください。フレーム音長を記述する時は数値の頭に"#"を記述します。
    c8^#1 / 1フレーム長く発音
     
  • 音長の減算
    "-"<len2>:ppmck release 5以降
    "~"<len2>:ppmck release 7c以降
    音長を記述した後、さらに"-"または"~"を書いてもうひとつ<len2>音長を記述することにより音長の減算ができます。
    たとえばc8~#5とすることで、8分音符から5フレーム引いた音長になります。

トラックのヘッダー

<ch> <str> チャンネル MML

■mckc、ppmckc----
トラックのヘッダーです。<ch>でチャンネル、<str>は各チャンネルのMMLです。
各チャンネルに対応する音源は以下の通りです。ppmckcでは全ての音源が使用可能です。

<ch>音源mckcでの使用
A,B内蔵音源矩形波
C内蔵音源三角波
D内蔵音源ノイズ
E内蔵音源DPCM
FFDS音源
G~LVRC7音源×
M,NVRC6音源矩形波×
OVRC6音源鋸波×
P~Wnamco106音源
X~ZFME-7音源×
a,bMMC5音源×
ACE a16b16

と複数連ねての記述も可能です。この場合は、

A a16b16
C a16b16
E a16b16

と同じ意味になります。

コメント

/* ~ */ 範囲コメント

■mckc、ppmckc


/* ~ */で囲まれた中身をコメント扱いにします。

; 及び / 一行コメント

■mckc、ppmckc


;か/の文字以降から行末までをコメントとします。

ヘッダー

行の先頭に記述します。

NSFヘッダ操作

#TITLE <str> 曲のタイトル

■mckc、ppmckc


曲のタイトルです。<str>は曲のタイトルを記述します。

  • mckc
    出力ファイルには直接反映されません。
  • ppmckc

    <str>が曲タイトルとして出力ファイルに反映されます。
    ただし、最長31バイトまでで、32バイト目以降は無視されます。
    例外的に、";"及び"/"が<str>に含まれる場合でもコメントアウトしません。

#COMPOSER <str> 作曲者名

■mckc、ppmckc


作曲者名です。<str>は作曲者名を記述します。

  • mckc

    <出力ファイルには直接反映されません。

  • ppmckc

    <str>が作曲者名として出力ファイルに反映されます。
    ただし、最長31バイトまでで、32バイト目以降は無視されます。
    例外的に、";"及び"/"が<str>に含まれる場合でもコメントアウトしません。

#MAKER <str> 原著作者名

■mckc*1、ppmckc


コピーライトです。<str>は原著作者名を記述します。

  • mckc

    <出力ファイルには直接反映されません。

  • ppmckc

    <str>が原著作者名として出力ファイルに反映されます。
    ただし、最長31バイトまでで、32バイト目以降は無視されます。
    例外的に、";"及び"/"が<str>に含まれる場合でもコメントアウトしません。

#PROGRAMER <str> 打ち込み者名

■mckc、ppmckc


データを打ち込んだ人の名です。<str>はデータを打ち込んだ人の名を記述します。出力ファイルには直接反映されません。
ppmckcでは例外的に、";"及び"/"が<str>に含まれる場合でもコメントアウトしません。

コンパイラ調整

#OCTAVE-REV <num> オクターブ変更記号反転

■mckc、ppmckc


<num>の初期値
0("> "で+1、"< "で-1)
オクターブ変更記号("> ","< ")の扱いを指定します。

<num>が0だと"> "でオクターブアップ、"< "でオクターブダウンします。

<num>が0以外のときは"< "と"> "の処理が逆になります。

#GATE-DENOM <num> クオンタイズ分母指定 ■ppmckc

■ppmckc


デフォルトで8になっているq<num0>,<num1>クオンタイズコマンドの分母を変更します。

<num>にクオンタイズの分母を指定する。

ドライバ設定

#DPCM-RESTSTOP DPCMチャンネル rコマンドによる再生停止設定■ppmckc

■ppmckc


DPCMチャンネルでrコマンドを使った時の挙動を変更します。
このコマンドを指定すると、rコマンドの時に即座にDPCMの再生が止まります。
wコマンドの挙動は変わらないので使い分けてください。

#PITCH-CORRECTION ピッチエンベロープ、LFO、ディチューン方向整順化■ppmckc

■ppmckc


ピッチエンベロープ、LFO、ディチューンの方向(プラス・マイナス)が正しくなります。さらに、Namco 106チャンネルのディチューンの設定がオクターブに依存しないようになります。

  • 整順化について
    ディチューン・ピッチエンベロープの値がプラス値の場合に、高音とする調整がされる。
    (FDS・N106では#PITCH-CORRECTION が設定されてなければ、ディチューン・ピッチエンベロープはマイナス値で高音となります。)

拡張音源有効化

#EX-DISKFM FDS音源使用

■mckc、ppmckc


DiskSystem?搭載のFDS音源を使用するようにします。
トラックFを使用する場合、この宣言が必要です。

  • FDSと他の拡張音源を同時使用すると問題が生じます。
    FDS使用時は$6000-$DFFFがRAMとして扱われるため、この範囲にある拡張音源のレジスタに書き込もうとするときに、$8000-$DFFFに存在するであろうプログラムやデータを破壊する可能性があります。
    参考までにこの範囲にあるレジスタを書いておきます。
    	$9000	W	VRC6 squ1
    	$9001	W	VRC6 squ1
    	$9002	W	VRC6 squ1
    	$9010	W	VRC7 address
    	$9030	W	VRC7 data
    	$A000	W	VRC6 squ2
    	$A001	W	VRC6 squ2
    	$A002	W	VRC6 squ2
    	$B000	W	VRC6 saw
    	$B001	W	VRC6 saw
    	$B002	W	VRC6 saw
    	$C000	W	Sunsoft 5B address
    (現在は一部のNSFプレーヤーではFDSと他の拡張音源の同時再生に対応したものがあります)

#EX-VRC7 VRC7音源使用 ■ppmckc

■ppmckc


VRC7拡張音源を有効にします。
トラックG,H,I,J,K,Lを使用する場合、この宣言が必要です。

#EX-VRC6 VRC6音源使用 ■ppmckc

■ppmckc


VRC6拡張音源を有効にします。
トラックM,N,Oを使用する場合、この宣言が必要です。

#EX-NAMCO106 <num> n106音源使用

■mckc、ppmckc


namcoカスタムのn106音源を使用するようにします。<num>は同時発音チャンネル数で、1~8の値が入ります。
トラックP,Q,R,S,T,U,V,Wを使用する場合、この宣言が必要です。

※<num>の値により音程が変わります、後でチャンネル数を変更する可能性があるなら8を設定しておく方が無難です。

#EX-FME7 FME7(Sunsoft 5B)音源使用 ■ppmckc

■ppmckc


FME7(Sunsoft 5B)拡張音源を有効にします。
トラックX,Y,Zを使用する場合、この宣言が必要です。

#EX-MMC5 MMC5音源使用 ■ppmckc

■ppmckc


MMC5拡張音源を有効にします。
トラックa,bを使用する場合、この宣言が必要です。

バンク設定

#AUTO-BANKSWITCH <num> バンク自動切換 ■ppmckc

■ppmckc


バンクの自動切換えを行います。

<num>は、bank 0のうちデータとして使用できる領域のサイズです。
とりあえず0を指定してコンパイルすればバンクが自動切換えされたデータになります。
nesasmでアセンブルした時に表示されるBANK 0のFREEバイト数を<num>に指定すると
さらに最適化されたデータ配置になります。

#AUTO

#AUTO
複数曲の場合は最初のMMLに書いてください。

#BANK-CHANGE <num> バンク切換

■mckc、ppmckc


(ppmck release 9以降では、この機能の替わりに#AUTO-BANKSWITCHを使うことを推奨します。)

NESASMのエラーメッセージで

Bank overflow, offset > $1FFF!と出力された場合にこのコマンドを使用してください。トラックの一部を8kbyteより上位の場所*2に配置してエラーを回避します。

<num>はトラック番号で1~14の数値が入り、1がAトラックに対応しており以下2=B、3=C、…P=7となっています。

#BANK-CHANGE <num0>,<num1> バンク切換

■mckc、ppmckc


  • mckc
    上記バンク切り替えの拡張書式です。

    <num0>はバンク番号で0~2の値が入ります。*3

    <num1>はトラック番号で1~14の数値が入り、1がAトラックに対応しており以下2=B、3=C、…P=7となっています。
    ちなみに以下は同じことをしています。

    #BANK

    #BANK

  • ppmckc
    この機能の替わりに#AUTO-BANKSWITCHを使うことを推奨します。

#NO-BANKSWITCH 0~3以外のバンク切換エラー設定 ■ppmckc

■ppmckc


(ppmck release 7c以降では、この機能はあまり意味がありません)
バンク切り替え系のコマンドで0~3以外のバンクが指定された場合にエラーにします。

#SETBANK <ch>,<num> バンク切換 ■ppmckc

■ppmckc


(ppmck release 9以降では、この機能の替わりに#AUTO-BANKSWITCHを使うことを推奨します。)

<ch>はトラックで、A~Zまたはabのどれか一文字を指定します。

<num>は、そのトラックの開始時のバンクを指定します。
各バンクは8KBです。

以下ではbank関連の挙動について詳しく見ていきます。

基本的に、ppmckcはトラックデータをsongdata.hにAから順番に書き出します。
#SETBANKを何も指定しない場合、全てbank 0に書き込まれます。

songdata_00:	;A
   :
   :
   :
songdata_01:	;B
   :
   :
   :
songdata_02:	;C

#SETBANK A,4 とした場合、Aトラック開始時に出力バンクがbank 4になります。

   .bank	4
   .org	$a000
songdata_00:	;A
   :
   :
   :
songdata_01:	;B
   :
   :
   :
songdata_02:	;C

ここで注意するべきことは、他に#SETBANKNBコマンドを使わなければ、後続のB・Cトラックはbank 4に入るということです。
#SETBANK A,4 という指定で、Aトラックだけがbank 4に入るわけではありません。

#SETBANK A,4 とし、BトラックのどこかでNBコマンドを使う場合。

   .bank	4
   .org	$a000
songdata_00:	;A
   :
   :
   :
songdata_01:	;B
   :
   :
	db	$ee				;bank 変更命令(NB)
	db	bank(songdata_bnk005)*2		;NB命令の引数
	dw	songdata_bnk005			;NB命令の引数
 	.bank	5				;以降は bank 5 に書き込み
	.org	$a000
songdata_bnk005:
   :
   :
songdata_02:	;C

この場合では、AトラックからBトラックの途中までは bank 4 に入り、BトラックのNBコマンド以降(Cトラック以降も)は bank 5 に入ります。

#SETBANK A,4
#SETBANK B,4 とした場合。

	.bank	4	;「今から書くデータは、bank 4のアドレス$a000に書き込む」
	.org	$a000	;というnesasmの命令
songdata_00:	;A
   :
   :
	.bank	4	;「今から書くデータは、bank 4の続きに書き込む」
songdata_01:	;B
   :
   :
   :
songdata_02:	;C

別のトラックを同じバンクで指定したり、DPCMの置いてあるバンクを指定してもデータが上書きされる事はありません。

コンパイラ出力ファイル関連

#EFFECT-INCLUDE シーケンスデータを組み込み

■mckc、ppmckc


effect.h内にシーケンスデータを組み込みます。スイッチの"-i"と同じ働きをします。

#INCLUDE <str> ファイル取り込み

■mckc、ppmckc


他のファイルをこのファイルにインクルード(追加)します。最大16段階までインクルードを書けます。
ppmckcでは例外的に、";"及び"/"が<str>に含まれる場合でもコメントアウトしません。

データ定義

@<num> = { ~ | ~ } 発音中のデューティ比変化定義

■mckc、ppmckc


発音中にデューティ比を切り替える、自作音色の定義をします。

<num>は0~127の値が入り、この数値が音色2"@@<num>"コマンドの値になります。

  • mckc
    A,Bトラックで使用可能です。"{ }"の中身は0~3の値で、それぞれ以下の値になります。
    <num>デューティー比
    012.5%
    125.0%
    250.0%
    375.0%
  • ppmckc
    A,B,M,N,a,bトラックで使用可能です。A,B,a,bトラックで使用する場合はmckcと同じく、0~3の値を記述します。
    M,Nトラックの場合、"{ }"の中身は0~7の値で、それぞれ以下の値になります。
    <num>デューティー比
    06.25%
    112.50%
    218.75%
    325.00%
    431.25%
    537.50%
    643.75%
    750.00%

この値は512個まで書き連ねることが可能で","もしくはスペースで区切ります。
また、"{ }"の中に"|"がある場合、演奏時に音色データが最後まで到達した場合"|"の位置に戻って処理を続けます。"|"が省略された場合は最後のデューティ比を維持して発音します。
以下の2つは同じ音色になります。

@0 = { 0, 1, | 2 }
@02 = { 0 1 2 }

@v<num> = { ~ | ~ } 発音中の音量変化定義

■mckc、ppmckc


発音中に音量を切り替える、エンベロープの定義をします。

<num>は0~127の値が入り、この数値が@v<num>コマンドの値になります。
"{ }"の中に、絶対値で音量を指定します。
各トラックで扱える音量の範囲は、v<num>コマンドの項を参照して下さい。
この値は512個まで書き連ねることが可能で","もしくはスペースで区切ります。
また、"{ }"の中に"|"がある場合、演奏時にエンベロープデータが最後まで到達した場合"|"の位置に戻って処理を続けます。
"|"が省略された場合は最後の音量を維持して発音します。

@EP<num> = { ~ | ~ } 発音中の周波数変化定義

■mckc、ppmckc


発音中に周波数を切り替える、ピッチエンベロープの定義をします。

<num>は0~127の値が入り、この数値がEP<num> コマンドの値になります。
"{ }"の中身は-127~126の値で、発音周波数の値に加算されます。
この値は512個まで書き連ねることが可能で","もしくはスペースで区切ります。
また、"{ }"の中に"|"がある場合、演奏時にピッチエンベロープデータが最後まで到達した場合"|"の位置に戻って処理を続けます。
"|"が省略された場合は最後の値を維持して発音します。

参考:周波数とレジスタの関係

@EN<num> = { ~ | ~ } 発音中のノート変化定義

■mckc、ppmckc


発音中にノートを切り替える、ノートエンベロープ(高速アルペジオ)の定義をします。

<num>は0~127の値が入り、この数値がEN<num> コマンドの値になります。"{ }"の中身は-127~126の値で、発音ノート番号の値に加算されます。
この値は512個まで書き連ねることが可能で","もしくはスペースで区切ります。
また、"{ }"の中に"|"がある場合、演奏時にノートエンベロープデータが最後まで到達した場合"|"の位置に戻って処理を続けます。
"|"が省略された場合は最後の値を維持して発音します。
このパラメータは前回値からの相対値になります。

@EN00 = { 0, 1, 1, 1, -1, -1, -1 }

上記のようなノートエンベロープ定義があったときに Cの音を発音すると、c,c+,d,d+,d,c+,c と1フレームごとに発音します。

@MP<num> = { <param1>, <param2>, <param3>, <param4> } LFOパラメータ定義

■mckc、ppmckc


LFOのパラメータを定義をします。

<num>は0~63の値が入り、この数値がMP<num> コマンドの値になります。

<param1>はLFOがかかるまでの時間(ディレイ)で0~255の値をとります。

<param2>はLFOのスピードです。1~255の値を取り、値が小さいほどLFOのスピードが速くなります

<param3>はLFOのかかり具合(デプス)です。0~255の値をとります。この値が大きければ大きいほど音がうねります。
参考:周波数とレジスタの関係
0を指定すると再生中にフリーズするので注意

<param4>は頂点付近でデプスを半減させるまでの時間(スピード)です。ドライバ側が未対応ですので、0を入れておいてください。

@DPCM<num> = { "<str>", <param0>, <param1>, <param2>, <param3> } DPCM音色登録

■mckc、ppmckc


デルタPCMの音色を登録します。

<num>はデルタPCM番号で0~63の値をとります。この値が直接ノート指定n<num> コマンドの値になります。

<str>はデルタPCMのファイル名です。

<param0>は再生周波数パラメータで、0~15の値をとります。値が大きくなるほど再生周波数が高くなります。

<param1>は再生サイズです。再生サイズは4081以下である必要があります。
0を指定すると指定が省略されたとみなし、ファイルサイズが再生サイズになります。
ただし、再生サイズは「16で割ると1余る」という条件を満たす必要があります。(言い換えれば「16進数で表現した時に下1ケタが1」)
この条件を満たさない場合は、条件を満たす最も近い値に切り上げ、0xAAでパディングします。

<param2>はデルタカウンタ初期値です。ここで指定した値が発音時に$4011へ書き込まれます。
ただし、$ffを指定すると発音時への$4011の書き込みを行わないようになります。
なお、ファミコンには$4011に0以外の値を書き込むと三角波およびノイズのボリュームが変わるという挙動があります。*4

<param3>はDMC再生モード指定です。0,1,2の値を取ることができます。
0は通常再生モードです。1はループ再生モードです。2は再生後にIRQを発生させるモードですが、基本的に2は指定しないで下さい。

なお、<param1>以降は省略が可能です。

<param1>の省略時の値はファイルサイズになります。(再生サイズの条件を満たさない場合パディングが実行されます)

<param2>の省略時の値は0です。

<param3>の省略時の値は0です。

  • mckc
    mckcでは<param2>以降は対応していません。
  • ppmckc
    DPCMトータルサイズが0x4000バイトを超える場合、自動でバンク切り替えします。この自動バンク切り替えが発生する場合は、DPCMが置かれるバンクと同じバンクをNBコマンド#SETBANKで指定してトラックデータを書き込むことはできません。
    #NO-BANKSWITCHを指定した場合はこの自動バンク切り替えは行われません。
    なお、DPCMトータルサイズは各ファイルの単純な合計とは一致しません。(アラインメントが入るので)

@FM<num> = { ~ } FDS音源波形定義

■mckc、ppmckc


FDS音源の波形パラメータを設定します。

<num>は0~127の値が入り、この数値が音色2"@@<num>"コマンドの値になります。
"{"~"}"内は64個の0~63の範囲内の数値です。数字と数字の間は、スペースもしくは","で区切ります。

 

@N<num> = { ~ } n106音源波形定義

■mckc、ppmckc


n106音源の波形パラメータを設定します。

<num>は0~127の値が入り、この数値が音色2"@@<num>"コマンドの値になります。
"{"~"}"内の最初の数値は0~31でn106音源のバッファ番号です。同時に発音できる音色はこのバッファ番号の数だけです。
この次以降に登録されるウェーブデータの数によって登録できるバッファ数が変化します。
次の数値は4/8/12/16/20/24/28/32個の0~15の範囲内の数値で実際のウェーブデータです。
ウェーブデータとバッファ数の関係は以下のようになっています。

ウェーブデータ 4個 … バッファ数32個(0~31)
ウェーブデータ 8個 … バッファ数16個(0~15)
ウェーブデータ12個 … バッファ数10個(0~ 9)
ウェーブデータ16個 … バッファ数 8個(0~ 7)
ウェーブデータ20個 … バッファ数 6個(0~ 5)
ウェーブデータ24個 … バッファ数 5個(0~ 4)
ウェーブデータ28個 … バッファ数 4個(0~ 3)
ウェーブデータ32個 … バッファ数 4個(0~ 3)

ウェーブデータ個数は混在して使用可能ですが、1つだけ注意する事があります。
たとえばバッファ番号0にウェーブデータ32個のデータを格納した時にはウェーブデータ4個のデータのバッファ0~7までは使用できません。正確にはウェーブデータ32個のデータの一部がウェーブデータ4個のデータに書き換えられてしまいます。
同様にウェーブデータ32個時のバッファ0/1とウェーブデータ28個時のバッファ1などの組み合わせも使用不可能です

ウェーブデータ32個のバッファ0        ウェーブデータ4個のバッファ0~7
+-------------------------------+    +-------------------------------+
|             32個              | = |4個|4個|4個|4個|4個|4個|4個|4個|
+-------------------------------+    +-------------------------------+
※上記二つは同じ領域を共有しています。

数字と数字の間は、スペースもしくは","で区切ります。

詳しくはN106音源波形定義詳細を参照。

※サンプル数により音程が変わります、曲の進行により音色を切り替える場合、変更前、変更後でサンプル数は同じものを使用した方が無難です。

 

@OP<num> = { ~ } VRC7音源音色定義 ■ppmckc

■ppmckc


VRC7のFM音源の音色定義を行うことができます。

例:
@OP0 = { $00,$00,$00,$00,$00,$00,$00,$00 }

8個のデータが必要です。
数値の意味はVRC7のユーザー定義音色を参照してください。

 

@OP<num>で定義した音色は、トラック中でOP<num> (または@@<num+64>)とすることでVRC7のレジスタにロードされます。

例:
@OP0 で定義した音色は
G @@0 OP0
で使用します。

なお、ユーザー定義音色は同時に一種類しか使えません。@@0の音色は、最後に(G~Lのいずれかのトラックで)使用されたOP<num> にによって決まります。
ppmckではAから順にトラックを処理しているため、複数トラックでユーザー定義音色を使用する場合、OP<num> にはGトラックに書いておくとよさそうです。

G @@0 OP0  c d     ;Gトラックをユーザー定義音色にし、OP0を実行、cを発音した後で
H @@0      e f     ;Hトラックをユーザー定義音色にし、eを発音し(すでにOP0は実行されている)
I @@0      g a     ;Iトラックをユーザー定義音色にし、gを発音(すでにOP0は実行されている)

逆はダメです。

G @@0      c d     ;(まだOP0は実行されていないのに)cを発音した後で
H @@0      e f     ;eを発音し
I @@0 OP0  g a     ;その後OP0を実行
 

@OT<num> = { ~ } VRC7音源音色定義2 ■ppmck9a ex5以降

MGSDRVの音色定義に準拠した書き方
numは@OP<num>と共通

#EX-VRC7
@OT0 = {
 ;TL FB
 22, 7,
 ;AR DR SL RR KL ML AM VB EG KR DT
 15, 6,15, 0, 0, 6, 0, 1, 1, 0, 1,
 15, 2, 2, 8, 1, 1, 0, 0, 1, 0, 1
}
G v15 OP0 t120 o4 l4 cdefgab>c

@MW<num> = { ~ } FDS音源エフェクト波形定義

■mckc(5-658パッチ)、ppmckc


FDS音源のエフェクト波形を定義します。

<num>は0~7の値が入り、この数値が@MHヘッダーの<param4>の値になります。
"{"~"}"内は32個の0~7の範囲内の数値です。
数値と波形の関係は以下のような相対変化になります。

0 …  0    4 … 0にリセット
1 … +1    5 … -4
2 … +2    6 … -2
3 … +4    7 … -1

数字と数字の間は、スペースもしくは","で区切ります。

@MH<num> = { <param1>, <param2>, <param3>, <param4> } FDS音源ハードウェアエフェクトデータ定義

■mckc(5-658パッチ)、ppmckc


FDS音源のハードウェアエフェクトデータを設定します。

<num>は0~15の値が入り、この数値がMHコマンドの値になります。

<param1>はエフェクトがかかるまでの時間(ディレイ)で0~255の値をとります。

<param2>はエフェクト周波数で、0~4095の値をとります。値が大きくなるほどエフェクト周波数が高くなります。

<param3>はエフェクトのかかり具合です。0~63の値をとります。この値が大きいほどエフェクトがかかります。

<param4>はエフェクトに使う波形を指定します。@MWで定義した波形の番号を指定します。

$<alias> <mml> 1文字マクロ定義 ■ppmckc

■ppmck release9ex3以降


マクロを定義します。

<alias>はアルファベット大文字1文字(但し他のコマンドと被るものはダメ多分)

<mml>にMMLを記述する。

【mck】ファミコン音源について語りましょう11【NSF】の236より
http://homepage1.nifty.com/rophon/mck2ch/thread/thread_11th.htm#res236

強引1文字マクロ機能もついてるよ
$B @v4 c
$S @v3 f
とか定義して
C l8B4S4BBS4
みたいに書ける

とのことでした。

コマンド

トラックヘッダーのあとに記述するコマンドについて説明します。
トラックヘッダーと分けてこちらを(狭義の)MMLと呼ぶことがあります。

音符、休符系

c,d,e,f,g,a,b<len> 音符

■mckc、ppmckc


  • コマンド
    c,d,e,f,g,a,b<len>
  • <len>の初期値
    4

指定の音階で発音します。
コマンドの直後に+をつけると半音上がった音になり、コマンドの直後に-をつけると半音下がります。

<len>は音長で、何分音符かを数字で書きます。(例 f1 だと全音符、c8 だと8分音符)

<len>を省略した場合は、lコマンドで設定した値になります。
付点音符は . で記述します、音長に半分の長さが加算されます。(例 c4. だと4分音符+8分音符の長さ)
付点は連続記述可能。(例 a2.. だと2分音符+4分音符+8分音符の長さ)
音長は他にも様々な記述方法があります、詳しくは音長の扱いを参照して下さい。

 

Dch(ノイズ)では cが最も高い音、bが最も低い音になります。
Ech(DPCM)ではできるだけnコマンドを使用して下さい。(発音できない番号があるため)

 
  • 最大分解能
    テンポ(t)255~192191~8180~5958~2221~1211~109~54~321
    音長<len>6412825651210242048409681921638432768
    これを超えた場合、Warning「フレーム音長が0になりました。」が発生します。

r<len> 休符

■mckc、ppmckc


  • コマンド
    r<len>
  • <len>の初期値
    4

指定の時間だけ発音しません。<len>は音長です。

<len>を省略した場合は、lコマンドの値を使用します。
音長は様々な記述方法があります、詳しくは音長の扱いを参照して下さい。

 

DPCM音源でプチノイズが発生する場合は#DPCM-RESTSTOPを設定するか、wコマンドを使用することをお勧めします。

時間、音長系

t<num> テンポ1

■mckc、ppmckc


  • コマンド
    t<num>
  • <num>の初期値
    120

テンポを指定します。テンポの範囲は範囲は1~255までです。
テンポをtコマンドで指定した場合、テンポの値によっては音符のフレーム数の計算値が整数になりません。このためテンポのふらつきやループずれが生じることがあります。ふらつきやループずれを避けたい場合は@tコマンドを使用するとよいでしょう。

@t<len>,<num> テンポ2

■mckc(5-658パッチ)、ppmckc


  • コマンド
    @t<len>,<num>
  • <len>,<num>の初期値
    4,30

音長<len>が<num>フレームになるようにテンポを指定します。
(14400 / <num> / <len>)のテンポに相当します。
例:@t4,24とした場合、4分音符を確実に24フレーム毎に等間隔で鳴らせます。

  • 14400 ÷ テンポ ÷ 音長 = フレーム数
    Tempo\音長124812162432486496192
    T502881447236241812963
    T6024012060302015105
    T751929648241612864321
    T80180904515
    T90160804020105
    T10014472361812963
    T120120603015105
    T15096482412864321
    T1609045
    T180804020105
    T200723618963
    T2256432168421
    T2406030155
    (1フレーム=1/60秒)

参考: @tによるテンポ指定とBPMの関係

l<len> デフォルト音長

■mckc、ppmckc


  • コマンド
    l<len>
  • <len>の初期値
    4

デフォルトの音長を設定します。<len>は音長です。
(音符、休符 の<len>を省略したときの音長です)

q<num0>,<num1> 発音時間1(クオンタイズ1)

■mckc、ppmckc


  • コマンド
    q<num0>,<num1>
  • <num0>,<num1>の初期値
    8,0

発音時間(クオンタイズ)の指定をします。

  • mckc
    発音時間を音符の<num0>/8だけ発音するようにします。範囲は1~8です。mckcでは<num1>には対応していません。
  • ppmckc
    発音時間を音長*<num0>/8+<num1>だけ発音するようにします*5。<num0>の範囲は0~8です。<num1>は正負の値を指定することができますが、発音時間が音長の100%を超えたり0以下になるような指定はできません。

    <num1>を省略した場合は0になります。
    #GATE-DENOM <num> を指定した場合、上記の説明で8となっている部分は<num>になります。

@q<num> 発音時間2(クオンタイズ2)

■mckc、ppmckc


  • コマンド
    @q<num>
  • <num>の初期値
    0

発音時間(クオンタイズ)の指定をします。音符の発音を<num>フレーム分だけ早めに停止します。範囲は1~65535です。

. 付点音符

■mckc、ppmckc


  • コマンド
    .

音符、休符に付随する音長表現で、音長に半分の長さを加算する。

A c4.    ;付点4分音符(長さは4分音符+8分音符)

付点音符は連続して記述可能。

A b+2... ;長さは2分音符+4分音符+8分音符+16分音符

- ~ 音長の減算

  • コマンド

    -<len2>  ■ppmck release 5以降

    ~<len2>  ■ppmck release 7c以降

音符、休符に付随する音長表現で、音長を減算する。
音符<len>の直後に"-"<len2>を記述すると<len2>の音長を減算する。
"~"でも同様。

A c1-2.    ;全音符-付点2分音符で 4分音符の長さ

"-"の場合は注意が必要
音符<len>-<len2> の<len>を省略した場合
音符-<len2> ←こうしたつもりが
音符-<len>  ←半音下がって、<len2>は減算のつもりが<len>音長となってしまう。
これを回避するため"~"の使用をお薦めします。

& タイ1(およびスラー)

■mckc、ppmckc


  • コマンド
    &

この記号の前の音と次の音をつなげます。ただし、つなげられるのは同じキーの音のみです。

A a4&a16   // a(ラ)の音を4分音符+16部音符分発音する。
 
  • ppmck9 ex3以降
    別のキーに繋げるようになりました、ポルタメントとして動作します。
    【mck】ファミコン音源について語りましょう11【NSF】の236より
    http://homepage1.nifty.com/rophon/mck2ch/thread/thread_11th.htm#res236
    対応トラックABC & N106 & VRC6 & VRC7
    @v0 = { 15,14,13,10,6,5 }
    A o4 @v0 @2
    A c c&g g
     
    ppmck9 ex3のDPCMで&コマンド使用した場合、再生時動作不安定になるため最新版を使用して下さい。
    ppmck9 ex3.5以降ではDPCMでは&コマンドは使用しても無視されます。

^ タイ2

■mckc、ppmckc


  • コマンド
    ^

この記号の前の音長と次の音長をつなげます。ただし、つなげられるのは同じ音階の音のみです。

A   a4^16   // a(ラ)の音を4分音符+16分音符分発音する。

{ ~ }<len> 連符

■mckc、ppmckc


  • コマンド
    { ~ }<len>

{ ~ }の中を<len>の音長で等分します。<len>を省略した場合は、lコマンドの値を使用します。

w<len> ウェイト

■mckc、ppmckc


  • コマンド
    w<len>

指定の時間だけ前回のコマンドを保持します。<len>は音長です。

<len>を省略した場合は、lコマンドの値を使用します。

音程系

o<num> オクターブ指定

■mckc、ppmckc


  • コマンド
    o<num>
  • <num>の初期値
    4

オクターブを直接指定します。

音源mckppmck
矩形波、三角波(A,B,C)2~72~8
ノイズ(D)00
DPCM(E)0~3-
FDS(F)0~60~6
VRC7(G,H,I,J,K,L)-0~7
VRC6(M,N,O)-1~8
n106(P,Q,R,S,T,U,V,W)0~80~8
FME7(X,Y,Z)-0~8
MMC5(a,b)-2~7
 

三角波は1オクターブ低く発音されます。
N106音源では、ウェーブデータが短いほど高く発音されます。

> 相対オクターブ1

■mckc、ppmckc


  • コマンド

    >

オクターブを現在の状態より1つだけアップ/ダウンします。
#OCTAVE-REVの値によりオクターブの±は反転します。デフォルトではアップです。

< 相対オクターブ2

■mckc、ppmckc


  • コマンド

    <

オクターブを現在の状態より1つだけダウン/アップします。
#OCTAVE-REVの値によりオクターブの±は反転します。デフォルトではダウンです。

n<num>,<len> 直接ノート指定

■mckc、ppmckc


  • コマンド
    n<num>,<len>

矩形波、三角波トラックはオクターブ2のドの音を0とした連番の値で音階を指定します。
FDS音源トラックではオクターブ0のドの音を0とした連番の値になります。

<num>は(オクターブ-(0 or 2))*16+ノート番号で計算されます。ノート番号は以下の表のとおりです。

C0G+(A-)8
C+(D-)1A9
D2A+(B-)10
D+(E-)3B11
E4---12
F5A13
F+(G-)6A+14
G7B15

<len>は音長です。省略するとデフォルトの音長になります。
オクターブ4のレの4分音符音を出力するときは、

(4-2)*16+2 = 34 ... n34,4とします。

矩形波チャンネルでは13,14,15は例外的に1オクターブ下の音階になります。
ノイズチャンネルではnumは0~15で周波数(1秒間に何回乱数を進めるか)に対応します。
DPCMチャンネルでははnumは0~63で@DPCM<num> 定義のnumに対応します。

@n<num>,<len> 直接周波数指定

■mckc、ppmckc


  • コマンド
    @n<num>,<len>

nesの周波数レジスタ値を直接指定します。

<num>は8~2034($07f2)で、大きいほど音程が低くなります。

<len>は音長です。省略するとデフォルトの音長になります。
下に音階とパラメータの対応値を記しておきます。オクターブが上がるとこれらの数値は1/2になります。(オクターブ4のCなら$6AE/2/2=$1ABになります)

O1A$07f2O2D+(E-)$059E
O1A+(B-)$0780O2E$054E
O1B$0714O2F$0501
O2C$06AEO2F+(G-)$04B9
O2C+(D-)$064EO2G$0476
O2D$05F4O2G+(A-)$0436

FDS音源では周波数の扱いが変わり、オクターブが下がると下記の数値は1/2になります。(オクターブ4のCなら$983/2/2=$260になります)

O6C$0983O6F+(G-)$0d74
O6C+(D-)$0a14O6G$0e41
O6D$0aaeO6G+(A-)$0f1a
O6D+(E-)$0b50O6A$1000
O6E$0bfdO6A+(B-)$10f4
O6F$0cb3O6B$11f6

参考:周波数とレジスタの関係

n106音源では現状使用不可能です。


A~DトラックでENコマンドとの同時使用ができないことを確認しました。
ENコマンドを使用したら、EN255, ENOF のいずれかでノートエンベロープを解除してから使用してください。

D<num> ディチューン

■mckc、ppmckc


  • コマンド
    D<num>

ディチューン(半音以下の周波数修正)の値を指定します。

<num>は-127~126のディチューンデータです。255($ff)を指定するとディチューンが解除されます。

N106音源で使用する場合にはSA<num> ピッチシフト量設定を設定しないと効果は薄い。
参考:周波数とレジスタの関係

MP<num> ソフトウェアLFO (音程LFO)

■mckc、ppmckc


  • コマンド
    MP<num>

ソフトウェアLFOの値を指定します。

<num>は0~127のLFO番号です。255($ff)を指定するとLFOが解除されます。
定義は@MPを参照して下さい。

N106音源で使用する場合には先にSA<num> ピッチシフト量設定を設定しないと効果は薄い。

  • mckc
    複数トラックでの同時使用は出来ません。

MPOF ソフトウェアLFO OFF

■mckc、ppmckc


  • コマンド
    MPOF

ソフトウェアLFOを解除します。MP255と同等の処理をします。

EP<num> ピッチエンベロープ

■mckc、ppmckc


  • コマンド
    EP<num>

ピッチエンベロープの値を指定します。

<num>は0~127のピッチエンベロープ番号です。255($ff)を指定するかEPOFコマンドでピッチエンベロープが解除されます。
定義は@EPを参照して下さい。

N106音源で使用する場合には先にSA<num> ピッチシフト量設定を設定しないと効果は薄い。

EPOF ピッチエンベロープ OFF

■mckc、ppmckc


  • コマンド
    EPOF

ピッチエンベロープを解除します。EP255と同等の処理をします。

EN<num> ノートエンベロープ

■mckc、ppmckc


  • コマンド
    EN<num>

ノート(アルペジオ)エンベロープの値を指定します。

<num>は0~127のノートエンベロープ番号です。255($ff)を指定するかENOFコマンドでノートエンベロープが解除されます。
定義は@ENを参照して下さい。

ENOF ノートエンベロープ OFF

■mckc、ppmckc


  • コマンド
    ENOF

ノートエンベロープを解除します。EN255と同等の処理をします。

SM スムース(スラーらしきもの) ■ppmck9 ex3以降

■ppmck9 ex3以降


  • コマンド
    SM

SMからSMOFまでがスムースな発音になります。

A SM cdefg SMOF

対応トラックABC

ppmck release9a exシリーズ

SMOF スムース(スラーらしきもの)OFF ■ppmck9 ex3以降

■ppmck9 ex3以降


  • コマンド
    SMOF

スムースを解除します。

PS ポルタメント ■ppmck9 ex3以降

■ppmck9 ex3以降


  • コマンド
    PS
A c PS g PS c

などとすると、ピッチの上下を楽しむことができます。
ただし、PSコマンド後の音程は正確ではありませんので、正確な音程を望むにはノートによる再発音が必要になります。
対応トラックABC

ppmck release9a exシリーズ

s<num0>,<num1> スウィープ(音程スウィープ)

■mckc、ppmckc


  • コマンド
    s<num0>,<num1>
  • <num0>,<num1>の初期値
    0,0

スウィープ(音程変化)を指定します。
対応チャンネルA,B

  • <num0>はかかるスピード、
    <num0>0123456789101112131415
    変化速度スウィープOFF速い← 変化速度 →遅い
  • <num1>はかかり具合(深さ)を指定します。
    <num1>0123456789101112131415
    変化量0-7-6-5-4-3-2-107654321
    変化量はマイナス値で音程が下がり、プラス値で音程が上がります。

拡張音源トラックでは使用できません。

参考:周波数とレジスタの関係

K<num> トランスポーズ

■mckc(5-658パッチ)、ppmckc


  • コマンド
    K<num>
  • <num>の初期値
    0

これ以降の音程を<num>半音だけ上下させます。

SA<num> ピッチシフト量設定 ■ppmckc

■ppmckc


  • コマンド
    SA<num>

N106音源(P~Wトラック)用のコマンドです。
ディチューン、ピッチエンベロープ、ビブラートのかかり具合を強くします。
D EPMPの数値は<num>回左シフトされてから周波数数値に加減算されます。値の範囲は0~8です。

#PITCH-CORRECTIONを使用した場合のみ使用可能です。

音量系

v<num> 音量

■mckc、ppmckc


  • コマンド
    v<num>
  • <num>の初期値
    0

音量を設定します。各トラックで指定できる音量の範囲は下表の通りです。

トラック<num>の範囲
A,B0~15
C無効
D0~15
E無効
F0~63
G~L0~15
M,N0~15
O0~63
P~W0~15
X~Z0~15
a,b0~15

Fトラックでは、v33以上はv32と同じ音量です。
Oトラックでv43以上を指定すると、内部的に数値がオーバーフローして鋸波じゃなくなります。

 

mckc
@v<num>コマンドEHコマンドと併用はできません。
ppmckc
タイミングが異なれば@v<num>コマンドとの併用は可能。
EHコマンドとの併用は不明。

v+<num> 相対音量1

■mckc、ppmckc


  • コマンド
    v+<num>
  • <num>の初期値
    1

音量を現在の値より<num>だけ大きくします。

<num>を省略した場合は1になります。
音量範囲はv<num>コマンドを参照して下さい。

mckc
@v<num>コマンドEHコマンドと併用はできません。
ppmckc
同じトラック内で@v<num>コマンドとの併用は可能、但し@v<num>コマンドの後では不可、v<num>コマンドの後であること。
EHコマンドとの併用は不明。

v-<num> 相対音量2

■mckc、ppmckc


  • コマンド
    v-<num>
  • <num>の初期値
    1

音量を現在の値より<num>だけ小さくします。各トラックで指定できる音量の範囲は以下の通りです。

<num>を省略した場合は1になります。
音量範囲はv<num>コマンドを参照して下さい。

mckc
@v<num>コマンドEHコマンドと併用はできません。
ppmckc
同じトラック内で@v<num>コマンドとの併用は可能、但し@v<num>コマンドの後では不可、v<num>コマンドの後であること。
EHコマンドとの併用は不明。

@v<num> エンベロープ (音量エンベロープ)

■mckc、ppmckc


  • コマンド
    @v<num>
  • <num>の初期値
    0

ソフトウェアエンベロープを設定します。

<num>は0~127のエンベロープ番号を指定します。
定義は@vを参照して下さい。

 

mckc
v<num>コマンドEHコマンドと併用はできません。
ppmckc
タイミングが異なれば同じトラック内でv<num>コマンドとの併用は可能。
EHコマンドとの併用は不明。

EH<fade>,<num> ハードウェアエンベロープ (音量エンベロープ)

■mckc、ppmckc


  • コマンド
    EH<fade>,<num>
  • <fade>,<num>の初期値
    0,0
  • FDS音源
    FDS音源に搭載されているハードウェアエンベロープを操作します。

    <fade>は0で-方向、1で+方向に音量が変化します。

    <num>は変化するスピードで、0~63までです。
    v<num>コマンド@v<num>コマンドと同時には使用できません。

  • A,Bチャンネル(ppmck9 ex3以降)、a,b,Dチャンネル(MMC5とノイズppmck9 ex5以降)
    EHx,y
    x :エンベロープ 0:無効 1:有効
    y :エンベロープのループ 0:有効 1:無効
    A o4t30 EH1,0 @2 v0 c v2 d v4 e v6 f v8 g v10 a v12 b v14 >c r EH0 @2
    EHコマンド後にDuty比を設定(@2とか)するとセットされる。
    エンベロープを1:有効にした状態では、vコマンドはエンベロープの減衰速度の指定となり
    音量は最大音量(15)からの減衰となる。
    vコマンドによる減衰速度は0~15で、値が小さいほど早い。
    ※このコマンドには障害があり、エンベロープのループを1:無効にするとエンベロープが途切れる。
    また、エンベロープのループを0:有効にしているとき、rコマンド(休符)でもループが止まらない。
    更に、Dチャンネル(ノイズ音源)も対応となってはいるが、ノイズ音源にはDuty比が指定できない為、実際には使用できない。
    某吉さんのブログに対策が載ってます。
     
    ppmck release9a exシリーズ

@vr<num> リリースエンベロープ (音量エンベロープ)

■mckc、ppmckc


  • コマンド
    @vr<num>
  • <num>の初期値
    255

クオンタイズ(qコマンド及び@qコマンド)使用時に、発音時間が経過したら<num>のソフトウェアエンベロープ番号で残りの時間を発音させます。

<num>は0~127のエンベロープ番号です。255を指定すると通常の処理(発音時間が経過したらキーオフする)になります。
v<num>コマンド@v<num>コマンドEHコマンドと同時に使用する事が出来ます。

k<len> キーオフ ■ppmckc

■ppmckc


  • コマンド
    k<len>
  • <num>の初期値
    4

リリースエンベロープを発動させ、<len>で指定した音長ぶん待機します。

<len>を省略した場合は、lコマンドの値を使用します。「リリースエンベロープが発動する休符」ととらえてください。

音色切り換え系

@<num> 音色1

■mckc、ppmckc


  • コマンド
    @<num>
  • <num>の初期値
    0

音色を設定します。

<num>はデューティー比の値(0~3)を指定します。
mckc
音色2@@<num> コマンドとの併用は出来ません。
ppmckc
タイミングが異なれば同じトラック内で音色2 @@<num> コマンドとの併用が可能。

A,B,a,bトラック

<num>デューティー比
012.5%
125.0%
250.0%
375.0%

M,Nトラック

<num>デューティー比
06.25%
112.50%
218.75%
325.00%
431.25%
537.50%
643.75%
750.00%

X,Y,Zトラック

<num>音色
0ミュート
1トーン(初期設定)
2ノイズ
3トーン+ノイズ

X,Y,Zトラックでは、@2の時、n0(o0c)~n31(o2g)でノート番号がそのままノイズ周波数になります。
EPやENもノイズ周波数に反映されます。
上記以外のトラックでは使用できません。

@@<num> 音色2

■mckc、ppmckc


  • コマンド
    @@<num>
  • <num>の初期値
    0

A,B,F,G~L,M,N,P~W,a,bチャンネルで自作音色の番号を指定します。

<num>は予め定義した番号を指定します、値は0~127まで。
mckc
音色1 @<num> コマンドとの併用は出来ません。

ppmckc
タイミングが異なれば同じトラック内で音色1 @<num> コマンドとの併用が可能。

 
  • 矩形波音源 A,B,M,N,a,bチャンネル
    @<num> = { ~ | ~ }により定義した波形を使用します。
  • FDS音源 Fチャンネル
    @FM<num> = { ~ }により定義した波形を使用します。
  • N106音源 P~Wチャンネル
    @N<num> = { ~ }により定義した波形を使用します。
  • VRC7音源 G~Lチャンネル
    VRC7音源では少し扱いが違います。

    <num>は1~15が下表のプリセット音色、0がユーザー定義音色です。
    0のユーザー定義音色を使用する場合、OP<num> で定義音色を指定する必要があります。
    詳しくは@OP<num> = { ~ } VRC7音源音色定義を参照して下さい。

    <num>音色
    0ユーザー定義音色
    1シンセ(ややハード)
    2ギター(エレキ系)
    3ピアノ(アコースティック系)
    4フルート
    5クラリネット
    6ベル系
    7トランペット
    8バイオリン
    9ホルン
    10オルゴール
    11ビブラフォン
    12鋸波
    13アコースティックベース
    14シンセベース1
    15シンセベース2
    ※OPLLとは音色構成が異なります。

OP<num> VRC7ユーザ音色定義読み込み ■ppmckc

■ppmckc


  • コマンド
    OP<num>

@OP<num> で定義したVRC7のユーザー音色定義をVRC7のレジスタにロードします。

<num>の範囲は0~63です。
使用するために@@0に設定しておく必要がある。
詳しくは@OP<num> = { ~ } VRC7音源音色定義を参照して下さい。

MH<num> ハードウェアエフェクト

■mckc(5-658パッチ)、ppmckc


  • コマンド
    MH<num>
  • <num>の初期値
    255

FDS音源トラックのみのコマンドです。ハードウェアエフェクトを指定します。

<num>はハードウェアエフェクト番号です。255($ff)を指定するとハードウェアエフェクトが解除されます。

定義は@MHを参照して下さい。

MHOF ハードウェアエフェクト OFF

■mckc(5-658パッチ)、ppmckc


  • コマンド
    MHOF

ハードウェアエフェクトを解除します。MH255と同等の処理をします。

S<num> FME7(Sunsoft 5B)ハードウェアエンベロープ形状選択 ■ppmckc

■ppmckc


  • コマンド
    S<num>

FME7(Sunsoft 5B)音源(X, Y, Zトラック)用のコマンドです。
ハードウェアエンベロープ形状を選択します。

<num>はPSGの13番レジスタに書き込む値(0~15)です。

音量制御(v @v)コマンドとの併用はできません、併用した場合最後に指定した方が優先されます。

M<num> FME7(Sunsoft 5B)ハードウェアエンベロープ周期設定 ■ppmckc

■ppmckc


  • コマンド
    M<num>

FME7(Sunsoft 5B)音源(X, Y, Zトラック)用のコマンドです。
ハードウェアエンベロープ周期(Sコマンドで指定したエンベロープの変化速度)を設定します。

<num>はPSGの11,12番レジスタに書き込む値(0~65535)です。

音量制御(v @v)コマンドとの併用はできません、併用した場合最後に指定した方が優先されます。

N<num> FME7(Sunsoft 5B)ノイズ周波数設定 ■ppmckc

■ppmckc


  • コマンド
    N<num>

FME7(Sunsoft 5B)音源(X, Y, Zトラック)用のコマンドです。
ノイズ周波数を設定します。

<num>はPSGの6番レジスタに書き込む値(0~31)です。
@2を指定している時は無効です。

@@r<num> リリース時音色指定 ■ppmckc

■ppmckc


  • コマンド
    @@r<num>
  • <num>の初期値
    255

@vrの音色版です。

<num>は0~127の自作音色の番号です。255を指定するとオフになります。

演奏制御系

L トラックループ

■mckc、ppmckc


  • コマンド
    L

トラックのループ位置を指定します。

[ ~ | ~ ]<num> リピート1

■mckc、ppmckc


  • コマンド
    [ ~ | ~ ]<num>

[ ~ ]までを<num>回繰り返します。|は省略可能です。
|があるときは最後の繰り返しのときに|から]までの演奏をしません。
ネスト(入れ子)は幾つでも使用可能です。

|: ~ \ ~ :|<num> リピート2

■mckc、ppmckc


  • コマンド
    |: ~ \ ~ :|<num>

|: ~ :|までを<num>回繰り返します。\は省略可能です。
\があるときは最後の繰り返しのときに\から:|までの演奏をしません。
リピート1と違い、|: ~ \ ~ :|の内部を展開して出力しませんので、データサイズはこちらのほうが小さくなります。
ネスト(入れ子)は出来ません。

  • mckc
    このコマンドは暫定的に追加されています。テンポの値が75/150以外ではフレーム誤差が生じます。注意してください。

フレーム誤差をなくすmckcパッチが存在します
現在スターターキットなどで入手できるのはパッチの当たったバージョンです
ただしppmckcではこのパッチは当たっていません

SD<num> セルフディレイ ■ppmckc

■ppmckc


  • コマンド
    SD<num>

リリースエンベロープが発動するタイミングで、<num>回前のノートオンの音で残響音を付加します。

  • ふつうのリリースエンベロープの例
    • MML記述
      @v0 @vr1 l4 q4 cdefg
    • 実際の出力
      l8 q8 @v0c@v1w@v0d@v1w@v0e@v1w@v0f@v1w@v0g@v1w
  • セルフディレイの例
    • MML記述
      SD1 @v0 @vr1 l4 q4 cdefg
    • 実際の出力
      l8 q8 @v0c@v1w@v0d@v1c@v0e@v1d@v0f@v1e@v0g@v1f

SDOF セルフディレイ OFF ■ppmckc

■ppmckc


  • コマンド
    SDOF

セルフディレイを解除します。

SDQR セルフディレイ バッファリセット ■ppmckc

■ppmckc


  • コマンド
    SDQR

セルフディレイ用のバッファを空にします。つまり、ノートオンの履歴を忘れます。

  • MML記述
    A SD1 @v0 @vr1 l4 q4
    A cdefg
    A cSDQRdefSDQRg
  • 実際の出力
    A l8 q8
    A @v0c@v1w@v0d@v1c@v0e@v1d@v0f@v1e@v0g@v1f
    A @v0c@v1g@v0d@v1w@v0e@v1d@v0f@v1e@v0g@v1w

特殊

! データスキップ

■mckc、ppmckc


  • コマンド
    !

この記号以降の変換をスキップします。この記号があるトラックは、この記号以降のmmlをコンバートしません。

!! タイムシフト■ ppmck9a ex7以降


  • コマンド
    !!

この記号を書くと、その時間から再生される。

y<adr>,<num> レジスタ(メモリ)書き込み

■mckc、ppmckc


  • コマンド
    y<adr>,<num>

nesのメモリアドレス<adr>に<num>の1byteを書き込みます。nesのメモリ構造がわからない場合は使用しないようにしてください。

x<param0>,<param1> スルー

■mckc、ppmckc


  • コマンド
    x<param0>,<param1>

データに<param0>,<param1>を直接埋め込みます。詳しいコマンドはmckのテキストを参照してください。

NB<num> バンク移動 ■ppmckc

■ppmckc


  • コマンド
    NB<num>

(ppmck release 9以降では、この機能の替わりに#AUTO-BANKSWITCHを使うことを推奨します。)

<num>を指定しない場合は次のバンクへ移行します。

<num>を指定した場合はそのバンクへ移行します。

<num>を指定しない場合、NBコマンドをリピートコマンド([ ~ ])内で使用すると、
[ ~ ]リピートで展開された数だけNBを実行してしまいます。注意してください。

<num>を指定した場合はNB<num>コマンドはリピートコマンド([ ~ ])内で使用できません。

<num>の指定に関わらず、リピート2コマンド(|: ~ :|)内では使用できます。


  1. mckc.txtには載っていませんが
  2. 具体的には$A000-$BFFF
  3. 具体的には<num0>=0,1,2がそれぞれ$A000-$BFFF,$C000-$DFFF,$E000-$FFFFに対応しています
  4. この表現は少し間違っています。三角波およびノイズの音量を決めているのはあくまでDMCのDACの値です。$4011に値を書き込んだとしても、その後サンプルを再生すればDMCのDACの値が変わるので、三角波とノイズの音量も変わることになります。
  5. フレーム単位

参考