- 書式の基本
- ヘッダー
- NSFヘッダ操作
- コンパイラ調整
- ドライバ設定
- 拡張音源有効化
- バンク設定
- コンパイラ出力ファイル関連
- データ定義
- @<num> = { ~ | ~ } 発音中のデューティ比変化定義
- @v<num> = { ~ | ~ } 発音中の音量変化定義
- @EP<num> = { ~ | ~ } 発音中の周波数変化定義
- @EN<num> = { ~ | ~ } 発音中のノート変化定義
- @MP<num> = { <param1>, <param2>, <param3>, <param4> } LFOパラメータ定義
- @DPCM<num> = { "<str>", <param0>, <param1>, <param2>, <param3> } DPCM音色登録
- @FM<num> = { ~ } FDS音源波形定義
- @N<num> = { ~ } n106音源波形定義
- @OP<num> = { ~ } VRC7音源音色定義 ■ppmckc
- @OT<num> = { ~ } VRC7音源音色定義2 ■ppmck9a ex5以降
- @MW<num> = { ~ } FDS音源エフェクト波形定義
- @MH<num> = { <param1>, <param2>, <param3>, <param4> } FDS音源ハードウェアエフェクトデータ定義
- $<alias> <mml> 1文字マクロ定義 ■ppmckc
- コマンド
- 音符、休符系
- 時間、音長系
- 音程系
- o<num> オクターブ指定
- > 相対オクターブ1
- < 相対オクターブ2
- n<num>,<len> 直接ノート指定
- @n<num>,<len> 直接周波数指定
- D<num> ディチューン
- MP<num> ソフトウェアLFO (音程LFO)
- MPOF ソフトウェアLFO OFF
- EP<num> ピッチエンベロープ
- EPOF ピッチエンベロープ OFF
- EN<num> ノートエンベロープ
- ENOF ノートエンベロープ OFF
- SM スムース(スラーらしきもの) ■ppmck9 ex3以降
- SMOF スムース(スラーらしきもの)OFF ■ppmck9 ex3以降
- PS ポルタメント ■ppmck9 ex3以降
- s<num0>,<num1> スウィープ(音程スウィープ)
- K<num> トランスポーズ
- SA<num> ピッチシフト量設定 ■ppmckc
- 音量系
- 音色切り換え系
- 演奏制御系
- 特殊
- 参考
書式の基本 
数値の扱い 
パラメータとして扱う数値は以下の規則に則って処理されます。
- 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 | ○ |
F | FDS音源 | ○ |
G~L | VRC7音源 | × |
M,N | VRC6音源矩形波 | × |
O | VRC6音源鋸波 | × |
P~W | namco106音源 | ○ |
X~Z | FME-7音源 | × |
a,b | MMC5音源 | × |
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
#EX-VRC7 VRC7音源使用 ■ppmckc 
■ppmckc
VRC7拡張音源を有効にします。
トラックG,H,I,J,K,Lを使用する場合、この宣言が必要です。
- FDSと他の拡張音源を同時使用すると問題が生じます。
(現在は一部のNSFプレーヤーではFDSと他の拡張音源の同時再生に対応したものがあります) - VRC6とVRC7の同時使用も避けた方が良いかも知れません。
#EX-VRC6 VRC6音源使用 ■ppmckc 
■ppmckc
VRC6拡張音源を有効にします。
トラックM,N,Oを使用する場合、この宣言が必要です。
- FDSと他の拡張音源を同時使用すると問題が生じます。
(現在は一部のNSFプレーヤーではFDSと他の拡張音源の同時再生に対応したものがあります) - VRC6とVRC7の同時使用も避けた方が良いかも知れません。
#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を使用する場合、この宣言が必要です。
- FDSと他の拡張音源を同時使用すると問題が生じます。
(現在は一部のNSFプレーヤーではFDSと他の拡張音源の同時再生に対応したものがあります) - N106とSunsoft5Bの同時使用も避けた方が良いかも知れません。
#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
ここで注意するべきことは、他に#SETBANKやNBコマンドを使わなければ、後続の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> デューティー比 0 12.5% 1 25.0% 2 50.0% 3 75.0%
- ppmckc
A,B,M,N,a,bトラックで使用可能です。A,B,a,bトラックで使用する場合はmckcと同じく、0~3の値を記述します。
M,Nトラックの場合、"{ }"の中身は0~7の値で、それぞれ以下の値になります。<num> デューティー比 0 6.25% 1 12.50% 2 18.75% 3 25.00% 4 31.25% 5 37.50% 6 43.75% 7 50.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コマンドを使用して下さい。(発音できない番号があるため)
- 最大分解能
これを超えた場合、Warning「フレーム音長が0になりました。」が発生します。
テンポ(t) 255~192 191~81 80~59 58~22 21~12 11~10 9~5 4~3 2 1 音長<len> 64 128 256 512 1024 2048 4096 8192 16384 32768
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 ÷ テンポ ÷ 音長 = フレーム数
(1フレーム=1/60秒)
Tempo\音長 1 2 4 8 12 16 24 32 48 64 96 192 T50 288 144 72 36 24 18 12 9 6 3 T60 240 120 60 30 20 15 10 5 T75 192 96 48 24 16 12 8 6 4 3 2 1 T80 180 90 45 15 T90 160 80 40 20 10 5 T100 144 72 36 18 12 9 6 3 T120 120 60 30 15 10 5 T150 96 48 24 12 8 6 4 3 2 1 T160 90 45 T180 80 40 20 10 5 T200 72 36 18 9 6 3 T225 64 32 16 8 4 2 1 T240 60 30 15 5
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.5以降ではDPCMでは&コマンドは使用しても無視されます。
- ppmck release9a exシリーズ
対応トラックABC & N106 & VRC6 & VRC7 & MMC5
^ タイ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
オクターブを直接指定します。
音源 | mck | ppmck |
矩形波、三角波(A,B,C) | 2~7 | 2~8 |
ノイズ(D) | 0 | 0 |
DPCM(E) | 0~3 | - |
FDS(F) | 0~6 | 0~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~8 | 0~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+ノート番号で計算されます。ノート番号は以下の表のとおりです。
C | 0 | G+(A-) | 8 |
C+(D-) | 1 | A | 9 |
D | 2 | A+(B-) | 10 |
D+(E-) | 3 | B | 11 |
E | 4 | --- | 12 |
F | 5 | A | 13 |
F+(G-) | 6 | A+ | 14 |
G | 7 | B | 15 |
<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 | $07f2 | O2D+(E-) | $059E |
O1A+(B-) | $0780 | O2E | $054E |
O1B | $0714 | O2F | $0501 |
O2C | $06AE | O2F+(G-) | $04B9 |
O2C+(D-) | $064E | O2G | $0476 |
O2D | $05F4 | O2G+(A-) | $0436 |
FDS音源では周波数の扱いが変わり、オクターブが下がると下記の数値は1/2になります。(オクターブ4のCなら$983/2/2=$260になります)
O6C | $0983 | O6F+(G-) | $0d74 |
O6C+(D-) | $0a14 | O6G | $0e41 |
O6D | $0aae | O6G+(A-) | $0f1a |
O6D+(E-) | $0b50 | O6A | $1000 |
O6E | $0bfd | O6A+(B-) | $10f4 |
O6F | $0cb3 | O6B | $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
SMOF スムース(スラーらしきもの)OFF ■ppmck9 ex3以降 
■ppmck9 ex3以降
- コマンド
SMOF
スムースを解除します。
PS ポルタメント ■ppmck9 ex3以降 
■ppmck9 ex3以降
- コマンド
PS
A c PS g PS c
などとすると、ピッチの上下を楽しむことができます。
ただし、PSコマンド後の音程は正確ではありませんので、正確な音程を望むにはノートによる再発音が必要になります。
対応トラックABC
s<num0>,<num1> スウィープ(音程スウィープ) 
■mckc、ppmckc
- コマンド
s<num0>,<num1> - <num0>,<num1>の初期値
0,0
スウィープ(音程変化)を指定します。
対応チャンネルA,B
- <num0>はかかるスピード、
<num0> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 変化速度 スウィープOFF 速い← 変化速度 →遅い
- <num1>はかかり具合(深さ)を指定します。
変化量はマイナス値で音程が下がり、プラス値で音程が上がります。
<num1> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 変化量 0 -7 -6 -5 -4 -3 -2 -1 0 7 6 5 4 3 2 1
拡張音源トラックでは使用できません。
参考:周波数とレジスタの関係
K<num> トランスポーズ 
■mckc(5-658パッチ)、ppmckc
- コマンド
K<num> - <num>の初期値
0
これ以降の音程を<num>半音だけ上下させます。
SA<num> ピッチシフト量設定 ■ppmckc 
■ppmckc
- コマンド
SA<num>
N106音源(P~Wトラック)用のコマンドです。
ディチューン、ピッチエンベロープ、ビブラートのかかり具合を強くします。
D 、EP、MPの数値は<num>回左シフトされてから周波数数値に加減算されます。値の範囲は0~8です。
#PITCH-CORRECTIONを使用した場合のみ使用可能です。
音量系 
v<num> 音量 
■mckc、ppmckc
- コマンド
v<num> - <num>の初期値
0
音量を設定します。各トラックで指定できる音量の範囲は下表の通りです。
トラック | <num>の範囲 |
A,B | 0~15 |
C | 無効 |
D | 0~15 |
E | 無効 |
F | 0~63 |
G~L | 0~15 |
M,N | 0~15 |
O | 0~63 |
P~W | 0~15 |
X~Z | 0~15 |
a,b | 0~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比が指定できない為、実際には使用できない。
→某吉さんのブログに対策が載ってます。
@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> | デューティー比 |
0 | 12.5% |
1 | 25.0% |
2 | 50.0% |
3 | 75.0% |
M,Nトラック
<num> | デューティー比 |
0 | 6.25% |
1 | 12.50% |
2 | 18.75% |
3 | 25.00% |
4 | 31.25% |
5 | 37.50% |
6 | 43.75% |
7 | 50.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音源音色定義を参照して下さい。※OPLLとは音色構成が異なります。<num> 音色 0 ユーザー定義音色 1 シンセ(ややハード) 2 ギター(エレキ系) 3 ピアノ(アコースティック系) 4 フルート 5 クラリネット 6 ベル系 7 トランペット 8 バイオリン 9 ホルン 10 オルゴール 11 ビブラフォン 12 鋸波 13 アコースティックベース 14 シンセベース1 15 シンセベース2
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)コマンドとの併用はできません、併用した場合最後に指定した方が優先されます。
- 参考:YM2149-EnvelopeShape
- 参考:YMZ294による音声サンプル
※注:残念ながらアーカイブ保存はありませんでした
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記述
- セルフディレイの例
- MML記述
SD1 @v0 @vr1 l4 q4 cdefg
- 実際の出力
l8 q8 @v0c@v1w@v0d@v1c@v0e@v1d@v0f@v1e@v0g@v1f
- MML記述
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コマンド(|: ~ :|)内では使用できます。
- mckc.txtには載っていませんが
- 具体的には$A000-$BFFF
- 具体的には<num0>=0,1,2がそれぞれ$A000-$BFFF,$C000-$DFFF,$E000-$FFFFに対応しています
- この表現は少し間違っています。三角波およびノイズの音量を決めているのはあくまでDMCのDACの値です。$4011に値を書き込んだとしても、その後サンプルを再生すればDMCのDACの値が変わるので、三角波とノイズの音量も変わることになります。
- フレーム単位
参考 
- The Ultimate PPMCK MML Reference(英語)
http://www.neonempyr.org/ppmck_guide.html