SiOPM MML reference (version 0.5.6)

System operations

システムコマンド

Statement Range Description
#TITLE{...}; (任意文字列) タイトルを記述する.
#TITLE{タイトル};
#SIGN{...}; [A-G][+#-b]?m? 調性を指定する.ノートにデフォルトで変化記号(シャープ/フラット)が付加される.ナチュラルを指定したい場合は,反対の変化記号をつける.
#SIGN{Fm}; fgab<cdef;  // 調性をFm(b,e,a,d にフラット)にする
#REV{...}; (octave|volume) シフトの方向を反転する.octave が指定された場合,'<'でオクターブダウン,'>'でオクターブアップ.volume が指定された場合,'('でボリュームダウン,')'でボリュームアップ.何も指定しない場合('#REV;'と記述),両方を反転させる.
#REV; cdefgab>c;  // "cdefgab<c" と同じ
#MACRO{...}; (static|dynamic) マクロの展開方法を指定する.static が指定された場合,マクロ内のマクロを定義時に展開する(デフォルト).dynamic が指定された場合,マクロ内のマクロを展開時に展開する.
#MACRO{static};  #A=cde;#B=Afg;o5B; #A=gfe;o4B; // "o5cdefg; o4cdefg" と展開される
#MACRO{dynamic}; #A=cde;#B=Afg;o5B; #A=gfe;o4B; // "o5cdefg; o4gfefg" と展開される
#QUANTn; 1 - (8) 'q'コマンドの最大値を変更する.'q'コマンドのデフォルト値は最大値の75%(切捨て)になる.
#QUANT16; q8cde; // q の最大値を16に設定
#FPSn; 1 - 1000 (60) @fpsコマンドのデフォルト値を変更する.
#FPS100;  // @fps のデフォルト値を100に設定
#END;   このコマンド以降の文字列を無視する.
#END; この文字列は無視される.
#SIGN{...};の書式
C, Am(全てナチュラル)
G, Emf+
D, Bmf+, c+
A, F+m, F#mf+, c+, g+
E, C+m, C#mf+, c+, g+, d+
B, G+m, G#mf+, c+, g+, d+, a+
F+, F#, D+m, D#mf+, c+, g+, d+, a+, e+
C+, C#, A+m, A#mf+, c+, g+, d+, a+, e+, b+
F, Dmb-
B-, Bb, Gmb-, e-
E-, Eb, Cmb-, e-, a-
A-, Ab, Fmb-, e-, a-, d-
D-, Db, B-m, Bbmb-, e-, a-, d-, g-
G-, Gb, E-m, Ebmb-, e-, a-, d-, g-, c-
C-, Cb, A-m, Abmb-, e-, a-, d-, g-, c-, f-
または,カンマ区切りで個別に変化記号を付与する.
例)ホールトーンスケールを指定.#SIGN{f+,g-,a-,b-};

マクロ定義

Statement Range Description
#[A-Z]=...; (MML文字列) マクロを定義する.'#ABCD=c;' or '#A-D=c;' でマクロA,B,C,Dに同時代入.
#A=cde;   l8AAgedAd;    // "l8cdecdegedcded" と展開される
#A-C=cde; l8ABgedCd;    // "l8cdecdegedcded" と展開される
#[A-Z]+=...; (MML文字列) マクロに文字列加算する.'#ABCD+=c;' or '#A-D+=c;' でマクロA,B,C,Dに同時加算.
#A=cde; #B=efg; #AB+=fg; l8AB;    // "l8cdefgefgfg" と展開される

テーブル定義

Statement Range Description
#WAVBn{...}; n;0 - 255 SCC音源(%4)で参照する波形を16進数文字列(64文字)で定義する.TSSCP の #WAVB から仕様が変更になり,一般的な unsigned char (-128=0x80, -1=0xff, 127=0x7f) で表現する.
#WAVB0{36454d4b41362f303639332309efd9cc362f220df2d9c8c3c6cbccc6bab0aeb7}; %4@0 cde;
#WAVn{...}(formula...); n;0 - 255 Wave table音源(%4)で参照する波形を定義する.テーブルのエントリ数32個でSCC音源波形を記述する.波形テーブルは -128~127の範囲で記述する.エントリ数が32以下の場合は 0 が埋められる.
#WAV0{(0,127)8,(127,-128)16,(-128,0)8}; %4@0 cde;
#WAVCOLORn{...}; n;0 - 255 Wave table音源(%4)で参照する波形をunsigned int 16進数文字列(wave color)で定義する.wave color は,ハモンドオルガンの基音より上の7本のドローバーをLSBから各4bitで表現したunsigned int値で,MSBの4bitで合成する波形の番号を指定できる.
#WAVCOLOR0{08400f0f}; %4@0 cde;
#TABLEn{...}(formula...); n;0 - 254 テーブルエンベロープ(@@,na,np,nt,nf,_@@,_na,_np,_nt,_nf)で参照するテーブルを定義する.値の範囲は参照するエンベロープコマンドに依存する.
#TABLE0{(64,0)5,(32,0)5,(16,0)5}; q8 na0 cde;
#TABLEn{...};と#WAVn{...};の書式
  • カンマ区切りで数値を記述する.
    例) #TABLE0{0,2,4,6}
  • "|"が指定されている場合,終端到達後,その位置から繰り返す.
    例) #TABLE0{0,2|4,6} (0,2,4,6,4,6,4,6...)
  • (a)n の書式は,aをn回繰り返す.
    例) #TABLE0{(0)4} (#TABLE0{0,0,0,0} と同等)
  • (a,b)n の書式は,[a,b)をnエントリで線形補間する.最後の値には到達しないので注意.
    例) #TABLE0{(0,8)4} (#TABLE0{0,2,4,6} と同等)
  • (a,b,c,...)n の書式は,数値リスト[a,b,c,...)をnで割った内分値を採用する.
    例) #TABLE0{(0,6,3,9)9} (#TABLE0{0,2,4,6,5,4,3,5,7} と同等)
  • 補間の際,小数値は四捨五入される.
    例) #TABLE0{(0,1,3)8} (#TABLE0{0,0,1,1,1,2,2,3} と同等)
  • {...}の後に'[repeat]*[magnify]+[offset]'と続ける事でエントリの繰り返し,倍率(負値/小数可),オフセット(負値/小数可)を指定できる.
    これらは,一旦,数値リストが整数に丸め込まれてから計算され,その結果は再び整数に丸め込まれる.
    • #TABLE0{0,1,2,3}3 (#TABLE0{0,0,0,1,1,1,2,2,2,3,3,3} と同等)
    • #TABLE0{0,1,2,3}*2 (#TABLE0{0,2,4,6} と同等)
    • #TABLE0{0,1,2,3}+2 (#TABLE0{2,3,4,5} と同等)
    • #TABLE0{0,1,2,3}3*2-2 (#TABLE0{-2,-2,-2,0,0,0,2,2,2,4,4,4} と同等)
    • #TABLE0{(0,3)6}*5 (#TABLE0{0,5,5,10,10,15} と同等)
    • #TABLE0{(0,6)6}*0.5 (#TABLE0{0,1,1,2,2,3} と同等)

FM音源 音色定義

Statement Range Description
#@n{...}(sequence...); n;0 - 255 @al,@fb,@で指定する各値をパラメータとして羅列する(ただしこのコマンドでは multiple に小数の指定が可能."@"コマンドでは不可.小数部は"@ml"の第2引数に相当する.).使用するオペレータの数(@al第1引数)は,定義したパラメータの数によって自動的に決定される.パラメータ数は18(1operator), 33(2operators), 48(3operators), 63(4operators).アルゴリズムについては"@al"の項を参照.
#@0{
  alg[0-15], fb[0-7], fbc[0-3],
  (ws, ar, dr, sr, rr, sl, tl, ksr, ksl, mul, dt1, detune, ams, phase, fixedNote) x operator count
};
%6@0 cde;
#OPL@n{...}(sequence...); n;0 - 255 OPL3で指定する各値をパラメータとして羅列する.パラメータ数は13(1operator), 24(2operators), 35(3operators), 46(4operators).3operatorsの場合,4operators接続のop#3をスルーするアルゴリズムが適用される.2operatorsの場合,alg=0,1 以外,エラーを返す.アルゴリズムについては"@al"の項を参照.
#OPL@0{
  alg[0-3], fb[0-7], 
  (ws[0-7], ar[0-15], dr[0-15], rr[0-15], egt[0,1], sl[0-15], tl[0-63], ksr[0,1], ksl[0-3], mul[0-15], ams[0-3]) x operator count
};
%6@0 cde;
#OPM@n{...}(sequence...); n;0 - 255 OPMで指定する各値をパラメータとして羅列する.パラメータ数は13(1operator), 24(2operators), 35(3operators), 46(4operators).3operatorsの場合,4operators接続のop#3をスルーするアルゴリズムが適用される.2operatorsの場合,4operators接続のop#2,#3をスルーするアルゴリズムが適用される.アルゴリズムについては"@al"の項を参照.
#OPM@0{
  alg[0-7], fb[0-7], 
  (ar[0-31], dr[0-31], sr[0-31], rr[0-15], sl[0-15], tl[0-127], ks[0-3], mul[0-15], dt1[0-7], dt2[0-3], ams[0-3]) x operator count
};
%6@0 cde;
#OPN@n{...}(sequence...); n;0 - 255 OPN指定する各値をパラメータとして羅列する.パラメータ数は12(1operator), 22(2operators), 32(3operators), 42(4operators).3operatorsの場合,4operators接続のop#3をスルーするアルゴリズムが適用される.2operatorsの場合,4operators接続のop#2,#3をスルーするアルゴリズムが適用される.アルゴリズムについては"@al"の項を参照.
#OPN@0{
  alg[0-7], fb[0-7], 
  (ar[0-31], dr[0-31], sr[0-31], rr[0-15], sl[0-15], tl[0-127], ks[0-3], mul[0-15], dt1[0-7], ams[0-3]) x operator count
};
%6@0 cde;
#OPX@n{...}(sequence...); n;0 - 255 OPXで指定する各値をパラメータとして羅列する.alg指定値もOPXのアルゴリズム番号を指定する.パラメータ数は14(1operator), 26(2operators), 38(3operators), 50(4operators).algの最大値は,オペレータ数によって変わる(1operator=0のみ,2operators=0-3,3operators=0-7,4operator=0-15,OPXと同等).アルゴリズムについては"@al"の項を参照.
#OPX@0{
  alg[0-15], fb[0-7], 
  (ws[0-7], ar[0-31], dr[0-31], sr[0-31], rr[0-15], sl[0-15], tl[0-127], ks[0-3], mul[0-15], dt1[0-7], detune[], ams[0-3]) x operator count
};
%6@0 cde;
#MA@n{...}(sequence...); n;0 - 255 MA3で指定する各値をパラメータとして羅列する.パラメータ数は14(1operator), 26(2operators), 38(3operators), 50(4operators).alg=0,1はパラメータ数26(2operators)以外ではエラーを返す.3,4operatorsの場合,alg=2-7以外,エラーを返す.3operatorsでalg=2-7の場合,4operators接続のop#3をスルーするアルゴリズムが適用される.2operatorsでalg=2-7の場合,4operators接続のop#2,#3をスルーするアルゴリズムが適用される.アルゴリズムについては"@al"の項を参照.
#MA@0{
  alg[0-7], fb[0-7], 
  (ws[0-31], ar[0-15], dr[0-15], sr[0-15], rr[0-15], sl[0-15], tl[0-63], ksr[0,1], ksl[0-3], mul[0-15], dt1[0-7], ams[0-3]) x operator count
};
%6@0 cde;
音色定義コマンドについて
上述各コマンドを用いてパラメータを予め定義し,シーケンス内で'%6@[0-255]'で呼び出す.
パラメータを羅列する際,数字以外は全て区切り文字として認識する(ただし可読性のためカンマ/スペース/タブを推奨.また,可読性のためオペレータ間の区切りをセミコロンにするのも良い). また,{...}の直後にMMLシーケンスを記述する事で,'%6@[0-255]'音色呼出と同時に実行するシーケンスを設定する事ができる.ただし,このMMLシーケンスに譜面コマンド(c,d,e,f,g,a,b,r)と音色変更コマンド(%,@)を含めるとエラー.
// 音色呼び出しの際,フィルタ/クォンタイズ設定も一緒に行う.
#@0{ 8,  0,  0;
16, 40,  0, 34, 34,  0, 13, 1, 0, 1, 0,  0, 0, 0, 0;
 1, 34, 28,  0,  0, 15, 35, 1, 0, 2, 0,  0, 0, 0, 0;
 4, 63, 63,  0,  0,  0, 42, 1, 0, 5, 0,  0, 0, 0, 0;
 0, 36,  0,  0, 34,  0,  0, 1, 0, 1, 0, -3, 0, 0, 0;
} @f96,2,32,72q4;

%6@0 cdefedc;

チャンネル間のFM接続

Statement Range Description
#FM{...}; (接続式) 後続チャンネルの周波数変調接続(@i,@o)を行う.後続シーケンスに対してアルファベット順に名前を割り振って,それらの接続を式で記述する.接続方法を記述するアルファベットは大文字/小文字どちらでも可.
'An(B)' でモジュレーション定義,OscB で OscA を変調する (n(0-7);変調度,省略時n=5(OPMにおけるFM変調と同値)).'A+B' で加算定義,Aでパイプを上書後,Bを加算する ('+'は省略可).'A(B+C)'は,OscBとOscCの加算結果でOscAを変調する.
【バグ?】3段以上のモジュレーションでTSSCPと異なる音が出る.ただしOPMエミュとは同じ音が出るため,TSSCPの方がおかしい気がする.
#FM{B3(A)}; %5q8s63cde; %5q2cde;   // "@o1%5q8s63cde; @i3%5q2cde;" と同じ
FM音源エミュレーション(#@ + %6) と FM接続システムコマンド(#FM)の違い
FM接続システムコマンドは,
  • 個別チャンネルの出力で変調するため,各オペレータに異なったシーケンスを与える事が出来る.
  • LPFilter適用後の出力をFM接続に利用できる.
  • Ring Modulation 接続も利用できる.
  • LFO/テーブルエンベロープは 1チャンネルにつき1個 のため,各オペレータに異なったLFO/エンベロープを与える事が出来る.
一方,FM音源エミュレーションは,
  • 接続が1チャンネル内で完結しているため,各オペレータからの出力をフィードバックできる(多段フィードバック等).
  • 接続が1チャンネル内で完結しているため,1つのシーケンスを定義すれば良く,データがシンプル.
  • 処理が軽い.1チャンネルで単一のLFOを使用するため,特にモジュレーション時の負荷が低い.(同条件を設定すると同じ音が出ますが,負荷はFM接続システムコマンドの方が30%程度高い(LFO無しの場合).)
また,FM音源チャンネルを#FM(@i,@o)で接続する事が出来る.この場合,#FMキャリアのop0(フィードバックされる位置)を#FMモジュレータで変調する.

エフェクタ接続

Statement Range Description
#EFFECTn{...}; (エフェクタ記述用MML) スロットにエフェクタを接続する.n=0 でマスターエフェクトを指定.
// Slot1にLPFilter→ディレイを設定.EffectSendLevel=32.
#EFFECT1{lf3000delay300,32,1}; @v64,32q0cder;
// Slot0はマスターエフェクト.最終出力に対してエフェクトを掛ける.
#EFFECT0{autopan}; q0$cdefed;
エフェクタ記述用MML
Statement Range Description
eqlg,mg,hg,lf,hf lg;Low gain[%](100)
mg;Middle gain[%](100)
hg;High gain[%](100)
lf;Low freq.[Hz](800)
hf;High freq.[Hz](5000)
3Band EQualizer
wsdist,level dist;Distortion[](50)
level;Output level[%](100)
Wave Shaper
delaytime,fb,cross,wet time;Delay time[ms](200)
fb;Feedback[%](25)
cross;Stereo channel crossing(0)
wet;Mixing level(100)
DELAY
reverbdly1,dly2,fb,wet dly1;Long delay time[%](70)
dly1;Short delay time[%](40)
fb;Feedback[%](80)
wet;Mixing level(100)
REVERB
chorustime,fb,depth,wet time;Delay time[ms](20)
fb;Feedback[%](50)
depth;Depth[](200)
wet;Mixing level(100)
CHORUS
autopanfreq,depth freq;Frequency[Hz](1)
depth;Panning width[%](100)
AUTOPAN
dsfreq, bits, ch freq ; Freq.Shift(0)
bits ; bit ratio(16)
ch ; channel count(2)
Down Sampler. Freq.Shift=0 sets 44.1kHz, 1 sets 22.05kHz, 2 sets 11.02kHz ...
speakerhardness hardness ; diaphragm hardness[%](10) SPEAKER simulator
lffreq,band freq;Frequency[Hz](800)
band;band width[oct](1)
Low pass Filter
hffreq,band freq;Frequency[Hz](5000)
band;band width[oct](1)
High pass Filter
bffreq,band freq;Frequency[Hz](3000)
band;band width[oct](1)
Band pass Filter
nffreq,band freq;Frequency[Hz](3000)
band;band width[oct](1)
Notch (band stop) Filter
pffreq,band freq;Frequency[Hz](3000)
band;band width[oct](1)
Peaking Filter
affreq,band freq;Frequency[Hz](3000)
band;band width[oct](1)
All pass Filter
nlfcut,res cut;cutoff table index(255)
res;resonance table index(255)
ENvelope controlable Low pass Filter
nhfcut,res cut;cutoff table index(255)
res;resonance table index(255)
ENvelope controlable High pass Filter

MML commands

制御

Statement Range Description
tn 1 - 511 (120) (Tempo)テンポ指定.どのシーケンス内に置いても全シーケンスに対してテンポが変更される.値省略時/初期値120.$ 繰り返しの場合,繰り返し内でテンポ変更を行っても,2ループ目以降テンポは変更されない.[]繰り返し内であれば,テンポは変更される.
t100cde t200cde;
$   (segno)無限繰り返し.シーケンスの終端に到達した場合,それまでに$が指定されていれば,その位置に戻る.
l8 $cde;     // "cdecdecde..."
[...|...]n 1 - 65535 (2) (loop)ループ.n無指定の場合 2 回繰り返す.ループ内に'|'が有る場合,最後の繰り返しで'|'以降のシーケンスがスキップされる.繰り返し回数は,ループの開始時/終了時どちらでも指定可能だが,終了時の設定が優先される.
【推奨】繰り返し回数の指定は,特殊な場合を除いて,ループ終了時に記述する.
l8 [cd|e]3;   // "cdecdecd"
@mask 0 - 63 (0) (event MASK)イベントマスク.後続のイベントを無効化するマスクを設定する.偽TSSCPの'@m'コマンド相当.値省略時/初期値0.
@mask1 v1c;   // "v1"は無視される
[A-Z]
[A-Z](n)
-128 - 127 (0) マクロ展開.#[A-Z]で定義したマクロ文字列を展開する.(n)を指定するとマクロ展開時にノートシフトされる.マクロ定義内のマクロはその時点での定義に従いに展開される(TSSCPと同様).'#MACRO{dynamic}'を指定すると,マクロ定義内のマクロはシーケンス内で展開される際に展開される.
#A=cde; l8 AAA;         // "cdecdecde"と展開される
#A=cde; l8 AA(2)A(-2);  // "cdedef+>b-<cd"と展開される
// ...   1行コメント.'//'以降,改行まで無視される.
// コメント
/* ... */   複数行コメント.'/*' と '*/' で囲われた領域を無視する.ネスト不可.
/* コメント */
![n...!|...!] 1 - 256 (2) 【非推奨:TSSCPとの互換性のためのコマンド】.コンパイル時展開ループ.繰り返し回数は,ループの開始時/終了時どちらでも指定可能.ループのネストは不可.nの最大値は256.
@maskの引数
無効にしたいイベントの数値(下記参照)を加算した値を指定する.
1; (音量関連) x,v,@v,(,)
2; (定位関連) p,@p
4; (キーオフ) q,@q
8; (オペレータ) s,@,@al,@fb,@rr,@tl,@ml,@dt,@ph,@fx
16;(エンベロープ) @@,na,np,nt,nf,_@@,_na,_np,_nt,_nf
32;(モジュレーション) ma,mp

音程関連

Statement Range Description
[a-g][+#-]?n 1 - 1920 ('l'指定値) (note)ノート指定.c-b がそれぞれド-シに対応.'+', '#' を続けるとシャープ,'-' でフラット.数字を続けると長さ指定.値省略時は'l'コマンドの指定値を採用.デフォルトは4.'#SIGN' マクロを指定すると自動で特定ノートにシャープ/フラットが付く.ナチュラルは逆符号で対応.
#SIGN{G}; cdef-gab<c  // 'f'にナチュラル
rn 1 - 1920 ('l'指定値) (Rest)休符指定.数字で音長指定.ノートと同じ.
cder cder gedcdedr;
on 0 - 9 (5) (Octave)オクターブの指定.'o5a'が440kHz.コンパイル時に展開されるため,ループすると値が元に戻る.値省略時/初期値5.
o4[co5c]  // 'o4c o5c o4c o5c'と演奏
[<>]n 1 - 9 (1) (octave shift)オクターブシフト.引数でシフトするオクターブ数を指定,省略時1.コンパイル時に展開されるため,ループすると値が元に戻る.デフォルトは'<'でオクターブ上げ,'>'でオクターブ下げ.'#REV' マクロを指定すると符号が反転.このコマンドによってオクターブが0-9の範囲を外れる場合は無視される.
o4[c<c]  // 'o4c o5c o4c o5c'と演奏
kn -8192 - 8191 (0) (Key detune)デチューン.半音=64としてデチューンの指定.値省略時/初期値0.
k-2cde; k2cde;
ktn -128 - 127 (0) (Key Transpose)トランスポーズ.TSSCPの'ns'に相当.半音=1としてトランスポーズの指定.値省略時/初期値0.
cde; kt7cde;
*   (pitch bend)ピッチベンド.q/@qによる指定を無効化し,直前のノートを次のノートにピッチ変移させる.次音発音時エンベロープ/位相はリセットされない.
c*<c;  // 1オクターブベンディング.
pon 0- (POrtament)ポルタメント.ノートをスラーで繋げた場合,直前のノートから次のノートにピッチ変移させる.ピッチベンドとは異なり,次音発音直後から変移を開始する.引数で変移にかかるフレーム数.値省略時/初期値0.
po6l8c&g&f&b&&ag&&fe&d&c4;  // スラーにポルタメントがかかる
!@krn -8192 - 8191 (0) 【非推奨:偽TSSCPとの互換性のためのコマンド】.(Key detune Relative)相対デチューン.半音=64としてデチューンをシフト.値省略時0.
!@nsn -128 - 127 (0) 【非推奨:偽TSSCPとの互換性のためのコマンド】.(Note Shift)相対トランスポーズ.半音=1としてトランスポーズをシフト.値省略時0.内部でノートシフトマクロ展開時に使われる.コンパイル時に展開されるため,ループ内で用いても1度しかトランスポーズされない.

音長関連

Statement Range Description
ln 1 - 1920 (4) (Length)デフォルト音長.ノート/休符で音長省略時に採用される値の指定.l1で全音符,l4で四分音符,l16で16分音符.値省略時/初期値4.
cder l8cder l16cder;
^n 1 - 1920 ('l'指定値) (extension)音長加算.ノート/休符/デフォルト音長で音長を指定値分加算する.値省略時は'l'コマンドの指定値を採用.
c4^16;  // 4分音符+16分音符長で演奏
qn 0 - 8 (6) (Quantize)クォンタイズ.キーオフのタイミングを指定音長との割合で指定する.q0でキーオンと同時にキーオフ.q4で指定音長の半分でキーオフ.q8でキーオフしない.値省略時/初期値6.
q0cr q4cr q8cr;
@qn1,n2 0 - 192 (0) (Absolute Quantize)絶対クォンタイズ/キーオンディレイ.第一引数でキーオンの長さを指定値分短く,第二引数でキーオンのタイミングを指定値分遅らせる.192で全音符長,48で4分音符長,12で16分音符長.値省略時/初期値0.【仕様】キーオンディレイ>0 が指定されている状態でスラーを掛けると,前音のキーオンディレイと後音のスラーが無効になる.
q8 @q48cr @q24cr @q0cr;  // "q0cr q4cr q8cr"と同じ
q8 @q,24 o5c2c2; q0 l8o4[8c]; // キーオンを8分音符分遅らせる
&   (slur)スラー.q/@qによる指定を無効化し,直前の音を次のノート/休符に繋げる.次音発音時エンベロープ/位相はリセットされない.
cd&e; // "d"と"e"の間がつながる
c&c;   // 位相リセットされないため,継ぎ目が判らない
#TABLE0{(0,128)90};na0 c&d&e;   // エンベロープもリセットされない.
&&   (weak slur)弱スラー.q/@qによる指定を無効化し,直前のノートを次のノート/休符に繋げる.次音発音時エンベロープ/位相はリセットされる.
c&&c; // 位相リセットされるため,継ぎ目が判る
#TABLE0{(0,128)90};na0 c&&d&&e;   // エンベロープもリセットされる.
キーオン長の計算式
'q'と'@q'は互いに独立していて,下記式で計算される.[キーオン長]が負値の場合,0に設定される.
[キーオン長] = [ノート音長] x ['q'指定値] / 8 - (['@q'第一引数] + ['@q'第二引数])

音量関連

Statement Range Description
vn 0 - 32 (16) (Volume)ボリューム.v0で無音,v16で最大値,v16-32でディストーション.値省略時/初期値16.
%5 v4c v8c v12c v16c v20c v24c v28c v32c;
[()]n 1 - 32 (1) (volume shift)ボリュームシフト.相対ボリューム.数値でシフトするボリュームを指定可.値省略時1.デフォルトは'('でボリューム上げ,')'でボリューム下げ.'#REV' マクロを指定すると符号を反転.
v1l8 c(c(c(c(c(c(c(c(c(c(c(c(c(c(c(c)4c)4c)4c)4c;
xn 0 - 128 (128) (eXpression)エクスプレッション.値省略時/初期値128.x0で無音,x128で最大値.音量テーブルエンベロープ(na,_na)は,このエクスプレッションの値を書き換える.このため,na,_naが指定されると x による指定は無効になる.
v8 x32c x64c x96c x128c v4 x32c x64c x96c x128c;  // "v"と"x"は独立
@vn1,...n8 0 - 128 (n1=64/n2-n8=0) (m@ster Volume)マスターボリューム/エフェクト鮮度.値省略時/初期値n1=64/n2-n8=0.第一引数でチャンネルのマスターボリューム,第2~8引数でEffect slot#1-#7 へのエフェクトセンドレベルを指定する.
@v64 v4c v8c v12c v16c @v32 v4c v8c v12c v16c;  // "@v"と"v"(と"x")は独立
#EFFECT1{chorus}; @v64,32 cde;  // エフェクトスロット#1(chorus)にlevel=32でエフェクトセンド
pn 0 - 8 (4) (Panning)パン.'p0'で左のみ発音.'p4'でセンター.'p8'で右のみ発音.
['@p'指定値] = (['p'指定値] - 4) x 16.
p0c p2c p4c p6c p8c;
@pn -64 - 64 (0) (fine Panning)詳細パン.p-64で左のみ発音.p0でセンター.p64で右のみ発音.値省略時/初期値0.
@p-64c @p-32c @p0c @p32c @p64c;
ボリュームの計算式
[モノラル出力] = (['v'指定値] / 16) x (['x'指定値] / 128)
[ステレオ左出力] = [モノラル出力] x (['@v'指定値] / 128) x cos((['@p'指定値] + 64) / 128 x PI/2)
[ステレオ右出力] = [モノラル出力] x (['@v'指定値] / 128) x sin((['@p'指定値] + 64) / 128 x PI/2)
@oで指定したパイプと,%eモジュールで受け取る出力には,モノラル出力が用いられる,@v, @pの値は無視される.

音色関連

Statement Range Description
%n1,n2 n1; 0 - 9 (0)
n2; 0 - 7 (0)
(module)音源モジュール選択.第一引数で音源の種類,第二引数でチャンネル番号を指定する.選択したモジュールによって'@'第一引数の意味が変化する.また,%を指定すると オペレータ数=1 にリセットされる.
%0c %1c %2c %3c;
@n1,...n15 n1; 0 - 1023 (0) (tone)音色選択/設定.音色選択とオペレータの設定,15引数(省略可).音源モジュール("%"コマンド指定値)によって第一引数の意味が異なる.
%5 @0c @1c @2c @3c @4c @5c @6c @7c; // 第一引数で波形選択
@0,32,28,28,28,2,0 cde;   // エンベロープ指定
@fn1,...n10 n1; 0 - 128 (128)
n2; 0 - 9 (0)
(Filter)フィルタ設定.ローパスフィルタとエンベロープの設定.第一引数でカットオフ,第二引数でレゾナンスを指定.10引数(省略可).
%2 @f64,3 q0 c;   // カットオフ=64, レゾナンス=3 でノイズ
@f0,2,32,32,32 cde;    // エンベロープ指定
sn1,n2 n1; 0 - 63 (28)
n2; -256 - 255 (0)
(Sustain sweep)リリース設定.第一引数で全ファイナルキャリアのRelease Rateを変更する.第二引数でキーオフ後のピッチスイープを指定する.
[スイープ速度[半音/frame]] = [第二引数] / 21
q4 s63cr s32cr s24cr s20cr s12cr;
q4 s28,-32cde;    // スイープ
@aln1,n2 n1; 1 - 4 (1)
n2; 0 - 15 (0)
(ALgorism)オペレータの接続の指定.第1引数でオペレータ数,第2引数で接続アルゴリズムを指定する.オペレータ数の初期値は1.この場合,TSSCPと同様1チャンネルで1つの波形生成を行い,接続アルゴリズムは無視される.このコマンドを指定すると,全オペレータが初期値にリセットされる.第2引数省略時のデフォルト値は,全オペレータ並列アルゴリズム(2ope;alg=1, 3ope;alg=5, 4ope;alg=7).
%5 @al2,0 cde;  // 2ope FM接続;o1(o0)
@fbn1,n2 n1; 0 - 7 (0)
n2; 0 - 3 (0)
(FeedBack)フィードバック設定.第1引数でフィードバック量,第2引数でフィードバックを返すオペレータを指定する.フィードバックが返されるオペレータは0番で固定されており,多段フィードバックを指定する場合は,第2引数で0以外を指定する.
%5 @al2,0 @fb5,1 cde;  // 2段フィードバック;o1(o0(o1))
in 0 - 3 (最後のオペレータ) (operator Index)オペレータ指定.後続の '@','@rr','@tl','@ml','@dt','@ph','@fx','@se'コマンドでパラメータ設定するオペレータを指定する.'@al'の第一引数で指定したオペレータ数より大きい場合,最後のオペレータ(4オペレータなら#3)が指定される.
%5 @al2 i0@0 i1@1 cde;   // 2ope 並列出力で op0;sin op1;saw を出力
@rrn1,n2 n1;0 - 63 (28)
n2;-256 - 255 (0)
(@ Release Rate)'@'の第5パラメータと同等.第二引数でキーオフ後のピッチスィープを指定.1オペレータの場合は's'と同じ.
@tln 0 - 127 (0) (@ Total Level)'@'の第7パラメータと同等.
@mln1,n2 n1;0 - 15 (1)
n2;-128 - 127 (0)
(@ MuLtiple)'@'の第10パラメータと同等.第二引数で非整数倍音multipleの指定.
[周波数比] = [第一引数(0の場合→0.5)] + [第二引数] / 128
@dtn -8192 - 8191 (0) (@ DeTune)'@'の第12パラメータと同等.'k'は全てのオペレータに対して設定を行うのに対して,'@dt'は'i'で指定した特定のオペレータに対して設定を行う.
@phn -1 - 255 (0) (@ PHase)'@'の第14パラメータと同等.
@fxn 0 - 127 (0) (@ FiXed note)'@'の第15パラメータと同等.
@sen 0 - 17 (0) (@ SSG Envelpe control)OPNA の SSGEC レジスタ相当.16,17は拡張.16;同じ音量で繰り返す8番エンベロープ,17;同じ音量で繰り返す12番エンベロープ.
@ern 0 , 1 (@ Envelop Reset)エンベロープリセット.1でアタック開始時にエンベロープレベルをリセットする.全オペレータに対して変更.初期値/デフォルト値0.
@clockn 1- (100) (@ CLOCK)見掛け供給クロック数の設定.エンベロープスピードを[%]で設定します.100はOPN,OPM相当,133はOPL,MA3相当です.あくまで見掛け上の供給クロックであり,ピッチ,モジュレーション等は変化しません.
'%','@'の第1引数
'%'第一引数でモジュールを選択し,'@'第一引数で音色番号を選択する.音色番号は選択したモジュールによって異なる.
*番号クリックでサンプル再生
'%'第一引数 '@'第一引数
'%0' PSG AY-3-8910/SN76489 相当.PSG音程モード(高音でオンチ/範囲が狭い)になる.@0-2で音色指定.
@0: %0@0cde矩形波
@1: #TABLE0{(0,16)16};%0@1nt0,20q8o0c1^1^1WhiteNoise(o0c - o1d+ が NoisePeriod = 0-15 に対応)
@2: %0@2cdePeriodicNoise(ピッチ指定)
'%1' FC ファミコン音源 pAPU(2a03) 相当.PSG音程モード(高音でオンチ/範囲が狭い)になる.@0-11で音色指定.
@0-7: #TABLE0{(0,8)8};%1@@0,20q8c1.デューティ比指定矩形波.[デューティ比]=[指定値]x12.5%.@0なら出力は常に-1.
@8: %1@8cdeファミコン三角波(8bitクオンタイズ三角波)
@9: #TABLE0{(0,16)16};%1@9nt0,20q8o0c1^1^1PulseNoise(o0c - o1d+ が NoisePeriod = 0-15 に対応)
@10: #TABLE0{(0,16)16};%1@10nt0,20q8o0c1^1^193bitNoise(o0c - o1d+ が NoisePeriod = 0-15 に対応)
@11: PCM呼出."%7@0" と同等
'%2' Noise ノイズユニット.@0-15でノイズ種類指定.周波数は'o5a'がオリジナル(サンプリング長=16k).
@0: %2@0cWhiteNoise
@1: %2@1cPulseNoise(1/-1 の2値ノイズ)
@2: %2@2c93bitNoise(15bit LFSR の bit0^bit6 をローテートシフトした際のbit0の値を出力)
@3: %2@3cHi-pass Noise(WhiteNoiseに対して,低周波カットフィルタをかけたノイズ)
@4: %2@4cPinkNoise(1/fノイズ)
@5-7: (reserved)
@8: %2@8cdePeriodicNoise(16bit LFSR の bit0 をローテートシフトした際のbit0の値を出力.ノートによるピッチ指定)
@9: %2@9cde93bitNoise(ノートによるピッチ指定)
@10-15: (reserved)
'%3' MA3 携帯向け音源 YMU762 の波形(@0-7までOPL3/OPXと同じ) 相当.@0-31で波形番号を指定.
@0: %3@0cdesin(p)
@1: %3@1cde(p<PI)?sin(p):0
@2: %3@2cdeabs(sin(p))
@3: %3@3cde(p<PI/2||(PI<=p&&p<PI*3/2))?abs(sin(p)):0
@4: %3@4cde(p<PI)?sin(2p):0
@5: %3@5cde(p<PI)?abs(sin(2p)):0
@8-13: #TABLE0{(0,6)6}+8;%3@@0,20q8c1上記数式のsin(p)を,2倍周期三角波(振幅=PI/4)でFM変調
@16-21: #TABLE0{(0,6)6}+16;%3@@0,20q8c1上記数式のsin(p)を,triw(p)に変更
@24-29: #TABLE0{(0,6)6}+24;%3@@0,20q8c1上記数式のsin(p)を,saww(p)(upward saw)に変更
@6: %3@6cde(p<PI)?1:-1
@14: %3@14cde(p<PI)?1:0
@22: %3@22cde(p<PI/2||(PI<=p&&p<PI*3/2))?1:0
@30: %3@30cde(p<PI/2)?1:0
@7: %3@7cde(p<PI*0.5)?1-sin(p):(p>PI*1.5)?-1-sin(p):0
@15,23,31 : %4@[0-2]と同等.
'%4' WaveTable コナミSCC音源/YMU762カスタム波形相当.#WAV, #WAVB で設定した波形を呼び出す.@0-255で波形番号を指定.
'%5' all 全波形の指定.@0-1023 で波形番号を指定.
@0: %5@0cdesin波
@1: %5@1cdeのこぎり波(upward saw)
@2: %5@2cdeのこぎり波(downward saw)
@3: %5@3cdeファミコン三角波(8bitクオンタイズ)
@4: %5@4cde三角波
@5: %5@5cde矩形波
@6: %5@6cdeホワイトノイズ(@16と同)
@7: %5@7cde(reserved) ... ?
@8: %5@8cdeスードシンク(低周波).output = -p/2PI
@9: %5@9cdeスードシンク(高周波).output = p/2PI
@10: %5@10cdeオフセット.output = 1
@11-15: (reserved)
@16-31: #TABLE0{(16,32)16};%5@@0,20q8c1^1^1ノイズ波.%2@([指定値]-16)と同等
@32-63: #TABLE0{(32,64)32};%5@@0,10q8c1^1^1MA3波形. %3@([指定値]-32)と同等
@64-95: #TABLE0{(64,96)32};%5@@0,10q8c1^1^1パルス波.%8@([指定値]-64)と同等
@96-127: (reserved)
@128-255: #TABLE0{(128,256)128};%5@@0,4q8c1^1^1^1ランプ波.%9@([指定値]-128)と同等
@256-511: WaveTable波形を指定.%4@([指定値]-256)と同等
'%6' FM FM音源エミュレーション.#@, #OPL@, #OPM@, #OPN@, #OPX@, #MA@ で設定した音色を呼び出す.@0-255で音色番号を指定.
'%7' PCM PCM音源.内部でロードしたmp3ファイルをPCM再生.@0-255で波形番号を指定.周波数は'o5a'がオリジナル.
@0(sample)%7@0l8c.c.gf.f.<c>rccgf.f.<c※内部でmp3データを読み込んでいます.
'%8' Pulse パルス波.@0-15/@16-31でデューティ比を指定.
@0-15: #TABLE0{(0,16)16};%8@@0,20q8c1^1^12値パルス波.output = (p<PI/8*[index])?1:-1;
@16-31: #TABLE0{(16,32)16};%8@@0,20q8c1^1^13値パルス波.output = (p<PI/16*([index]-16))?1:(p<PI/8*([index]-16))?-1:0;
'%9' Ramp ランプ波.のこぎり波と三角波の間の波形.@0=のこぎり波(upward)→@64=三角波→@127=のこぎり波(downward)
@0-63: #TABLE0{(0,64)64};%9@@0,2q8c1^1@0=のこぎり波(upward)→@64=三角波
@64-127: #TABLE0{(64,128)64};%9@@0,2q8c1^1@64=三角波→@127=のこぎり波(downward)
'%10' Sampler サンプラー.内部でロードしたmp3ファイルを再生.MIDIのドラムチャンネルのように各ノートに違う波形をアサイン可能.
@0(sample)%10v16l8cre4cce.c16rc16c16ercce.e16;%10o4l16[v16c8cv12c]8v16f1※内部でmp3データを読み込んでいます.
'%11' PMS Guitar 物理音源ギター.Karplus-Strong アルゴリズムによるギター物理音源.
@0,48,48,0,0,20s8(default)%11o3e1^1^2^8;%11o3r8a1^1^2;%11o4r4d1^1^4.;%11r4.o4g1^1^4;%11r2o4b1^1;%11r8^2o5e1^1^8;ナイロン弦ギター
@0,48,48,0,0,16s4#T=%11@0,48,48,0,0,16s4q8;t160;To3v12a1^1;To4v8r64e1^1;To4v7r32a1^1;To4v7r32.b1^1;To5v6r16e1^1;スチール弦ギター
@0,48,40,4,0,16s6@f96,0#EFFECT0{chorus delay};#T=%11@0,48,40,4,0,16s6@f96,0q8;t160;To3v12$a1^1;To4v8r4$e1^1;To4v7r4.$a4a4a2a4a4a2;To4v7r2.$b2b2b1;To5v6r1$e1^1;クリーンギター(+Chorus)
@0,48,24,8,0,17s2@f80#T=%11@0,48,24,8,0,17s2@f80mp0,6,10,10@v64,16;t160;#M=o3q8l8aga<c^2>aga<c*d0rc4.>aga<d*edc>s,-63a1^1;Tv12M;Tv8kt7M;ディストーションギター
@0,48,40,4,80,18s32t144;%11@0,48,40,4,80,18s32q8o2q8l8$v16av12a<c16cc+s40c+16s32deg>a16<s48a16>s32a<c&c+16de16>v8s48ev12s32f+g+;スラップベース
'@'の第2-15引数(%10,%11以外)
'@'コマンドは15引数を持ち,オペレータの出力設定を行う. 第一引数で音色選択,第2-7引数でエンベロープ,第8,9引数でキースケール,第10-12引数で周波数,第13-15引数でその他設定.基本的にFM音源オペレータのパラメータと同等. @コマンドの第2~15パラメータが省略された場合,それらの値は変更されない.%6の場合,i コマンドで指定した operator に適用される.
@ [ws], [ar], [dr], [sr], [rr], [sl], [tl], [ksr], [ksl], [mul], [dt1], [detune], [ams], [phase], [fixed pitch]
n1; (Wave Shape)音色設定[0-1023].前項を参照.
n2; (Attack Rate)キーオン後の増幅を指定[0-63(63)].小さい値ほど遅い.63で即時Total Level.0で立ち上がらない(無音).
n3; (Decay Rate)Total Level 到達後の減衰を指定[0-63(0)].小さい値ほど遅い.63で即時Sustain Level.0でキーオフまで最大音量を維持.
n4; (Sustain Rate)Sustain Level 到達後の音の減衰を指定[0-63(0)].小さい値ほど遅い.63で即時消音.0でキーオフまでSustain Levelを維持.
n5; (Release Rate)キーオフ後の減衰を指定[0-63(28)].小さい値ほど遅い.63で即時消音.0で次のノート発音まで出音を維持.'@rr'でも設定可.
n6; (Sustain Level)変化速度をdr->srに変更する点の音量を最大音量との相対値で指定[0-15(0)].[変更点音量]=[指定値]x-1.5[dB] (sl=2で半減).
n7; (Total Level)エンベロープの最大音量を出力との相対値で指定[0-127(0)].[最大音量]=[指定値]x-0.375[dB] (tl=8で半減).'@tl'でも設定可.
n8; (Key Scale Rate)高ピッチでエンベロープを早くする[0-3(0)].ksr=0ならオクターブにつき約0.4レート値を上げる, ksr=1;0.8, ksr=2;1.6, ksr=3;3.2.
n9; (Key Scale Level)高ピッチでTotal Levelを下げる[0-3(0)].ksl=0でオフ.ksl=1;-0.15[dB/oct],ksl=2;-0.3[dB/oct],ksl=3;-0.6[dB/oct].
n10; (Multiple)再生周波数を指定値倍する[0-15(1)].mul=0は0.5倍.'@ml'でも設定可.
n11; (Detune1)opm/opnの'dt1'相当[0-7(0)].再生周波数を微調整する.0-3でピッチ上,4-7でピッチ下げ.
n12; (Detune)再生ピッチをシフトする[-8192-8191(0)].64=1半音.'@dt'でも設定可.
n13; (Amplitude Modulation Shift)音量モジュレーション(ma)による音量変化の度合いを指定する[0-3(1)].ams=0でオフ.
n14; (Phase)キーオン時の位相を指定する[-1-255(0)].-1ならキーオン時に位相をリセットしない.[初期位相]=[指定値]/128*PI.'@ph'でも設定可.
n15; (Fixed note)オペレータのピッチを固定する.0ならピッチを固定しない.[fixed note]=60 で o5c.'@fx'でも設定可.
'@al'の引数(システムコマンド'#@'の第1引数)
'@al'コマンドは2引数を持ち,オペレータ数と各オペレータの接続の設定を行う.第2引数を省略した場合,全オペレータ並列アルゴリズム(2ope;alg=1, 3ope;alg=5, 4ope;alg=7)が選択される.*各オペレータ#0のフィードバック接続位置は"@fb"の第2引数により変更できるが,便宜上セルフフィードバックとして記述してある.
オペレータ数 アルゴリズム
1
2
3
4
FM音色システムコマンドのアルゴリズム変換テーブル
各FM音色システムコマンドの接続アルゴリズム(第一引数)の値は,下記のテーブルによって内部で@alコマンドに変換される.
#OPM@/#OPN@
alg:0 alg:1 alg:2 alg:3 alg:4 alg:5 alg:6 alg:7
2ope@al2,0@al2,1@al2,1@al2,1@al2,1@al2,0@al2,1@al2,1
3ope@al3,0@al3,1@al3,2@al3,3@al3,3@al3,4@al3,3@al3,5
4ope@al4,0@al4,1@al4,2@al4,3@al4,4@al4,5@al4,6@al4,7
#OPL@
alg:0 alg:1 alg:2 alg:3 alg:4 alg:5 alg:6 alg:7
2ope@al2,0@al2,1error error error error error error
3ope@al3,0@al3,3@al3,2@al3,2error error error error
4ope@al4,0@al4,4@al4,8@al4,9error error error error
#MA@
alg:0 alg:1 alg:2 alg:3 alg:4 alg:5 alg:6 alg:7
2ope@al2,0@al2,1@al2,1@al2,1@al2,0@al2,1@al2,1@al2,1
3opeerror error @al3,5@al3,2@al3,0@al3,3@al3,2@al3,2
4opeerror error @al4,7@al4,2@al4,0@al4,4@al4,8@al4,9
#OPX@
alg:0 alg:1 alg:2 alg:3 alg:4 alg:5 alg:6 alg:7 alg:8 alg:9 alg:10 alg:11 alg:12 alg:13 alg:14 alg:15
2ope@al2,0@al2,0
@fb0,1
@al2,1@al2,2error error error error error error error error error error error error
3ope@al3,0@al3,0
@fb0,1
@al3,1@al3,2@al3,3@al3,3
@fb0,1
@al3,5@al3,6error error error error error error error error
4ope@al4,0@al4,0
@fb0,1
@al4,1@al4,2@al4,3@al4,3
@fb0,1
@al4,4@al4,4
@fb0,1
@al4,8@al4,11@al4,6@al4,6
@fb0,1
@al4,5@al4,9@al4,12@al4,7
'@f'の引数
'@f'コマンドは10引数を持ち,第1,2引数で基本的なフィルタ設定,第3-10引数でエンベロープ設定を行う.
@f [co], [res], [ar], [dr], [sr], [rr], [co2], [co3], [sc], [rc]
n1; (Cutoff Freq.)カットオフ周波数[0-128(128)].0で最低周波数,128で全開放.
n2; (Resonance)レゾナンス[0-9(0)].0で無し,9で最大レゾナンス.
n3; (Attack Rate)アタック[0-63(0)].Cutoff Freq. → Cutoff Freq.#2 への変化速度.0で無変更(Cutoff Freq.の維持),63で即時変更.
n4; (Decay Rate)ディケイ[0-63(0)].Cutoff Freq.#2 → Cutoff Freq.#3 への変化速度.0で無変更(Cutoff Freq.#2の維持),63で即時変更.
n5; (Sustain Rate)サスティン[0-63(0)].Cutoff Freq.#3 → Suatain Freq. への変化速度.0で無変更(Cutoff Freq.#3の維持),63で即時変更.
n6; (Release Rate)リリース[0-63(0)].キーオフ後の Release Freq. への変化速度.0で無変更(キーオフ時点でのカットオフ周波数の維持),63で即時変更.
n7; (Cutoff Freq.#2)カットオフ周波数2[0-128(128)].キーオン後,[Attack Rate] の速度でCutoff Freq. →Cutoff Freq.#2に移行.
n8; (Cutoff Freq.#3)カットオフ周波数3[0-128(64)].Cutoff Freq.#2到達後,[Decay Rate] の速度でCutoff Freq.#2→Cutoff Freq.#3に移行.
n9; (Sustain CutOff)サスティンカットオフ[0-128(32)].Cutoff Freq.#3到達後,[Suatain Rate]の速度でCutoff Freq.#3→Sustain CutOffに移行.その後,キーオフまでSustain CutOffを維持する.
n10; (Release CutOff)リリースカットオフ[0-128(128)].[Release Rate]>0の場合,キーオフ後この周波数に移行.
filter parameters
%7;PCM音源 と %10;サンプラー
どちらもswf内部でロードしたmp3データを再生しますが,
PCM音源はピッチ可変で,@al/@fb以外のコマンドは通常のFM音源チャンネルと同様に使えます.
一方,サンプラーはピッチ変更不可で,ADSRエンベロープやフィルタを使用できませんが(テーブルエンベロープは可),各ノートに波形を割り振る事が出来ます.
※このサンプルでは,内部でmp3データを読み込んでいます.
// PCM音源はピッチ可変
%7@0l8c.c.gf.f.<c>rccgf.f.<c;
// サンプラーはノートで波形選択可
%10v16l8cre4cce.c16rc16c16ercce.e16;
%10o4l16[v16c8cv12c]8v16f1;
%11;物理音源ギターの音色
%11の物理音源ギターは,"@","s","@f"コマンドで音色を定義します.

"@"コマンドでピッキングの特徴を定義します.このコマンドは第1引数によって,第2引数以降の意味が異なります.
@0,[ar],[dr],[tl],[pitch],[ws]
第1引数が0の場合,以下5引数によって定義します.
第2,第3,第4引数は,それぞれピッキングのAttack rate, Decay rate, total levelでエンベロープを定義します.値の意味は,sl=15の場合のFM音源オペレータと同じです.
第5引数はピッキング音の音程で,ノート番号で指定します(default=60=o5c).
第6引数はピッキング音に用いる波形番号で,%5の場合の@第1引数で指定します(default=20=pink noise).通常,撥弦楽器モデリングではピッキング音にノイズ波形を用います.
@1,[FM音色番号]
@2,[PCM波形番号]
第1引数が1,2の場合,それぞれ,第2引数でFM音色番号,PCM波形番号を指定します.この場合,ピッキングにFM音源,PCM音源の出力音を使う事ができます.

"s"コマンドは,弦の倍音の減衰を定義します.sコマンドの第1引数で弦の倍音成分の減衰の早さを指定します.倍音成分自体はピッキングで与える音によってコントロールします.

"@f"コマンドは,通常の音色と同様にLPフィルタをかけます.

トリガー

Statement Range Description
%tn1,n2,n3 n1; - (0)
n2; 0 - 3 (1)
n3; 0 - 3 (1)
(event Trigger)イベントトリガー設定.ActionScriptコードと連動するために使用する.第1引数でトリガーID,第2引数でノートオン時のトリガータイプ,第3引数でノートオフ時のトリガータイプを指定.このコマンドを指定後,発音の度にイベントが発生するようになる.
%en1,n2 n1; - (0)
n2; 0 - 3 (1)
(dispatch Event)イベント発生.ActionScriptコードと連動するために使用する.第1引数でトリガーID,第2引数でトリガータイプを指定.このコマンドのタイミングでノートオンイベントが発生する.
イベントトリガー
"%t"が指定されると,その後シーケンス内でノート(c-b)が指定される度に,SiONTrackEevnt.NOTE_ON_STREAM, SiONTrackEevnt.NOTE_OFF_STREAM, SiONTrackEevnt.NOTE_ON_FRAME 及び SiONTrackEevnt.NOTE_OFF_FRAME イベントが発行されます.
また,第2/3引数でノートオン/オフ時に発行するイベントの種類を指定します(0=発行しない,1=NOTE_*_FRAMEを発行,2=NOTE_*_STREAMを発行,3=両方発行).
NOTE_*_STREAM イベントは,ストリーミング時に,そのノートがレンダリングされる直前に発行されます.
一方,NOTE_*_FRAME イベントは,フレーム内でそのノートが発音されるタイミング(に近いタイミング)で発行されます.
"%e"が指定されると,指定されたタイミングで1回だけノートオンイベントが発行されます.引数は同じです.

モジュレーション

Statement Range Description
@lfon1,n2 n1; 1 - (20)
n2; 0 - 3 (2)
(Low Frequency Oscilator)LFO設定.第1引数でLFO周期(60=1[sec]),第2引数で波形(0;downward saw, 1;square, 2;triangle, 3;random)を指定する.このコマンドは'mp','ma'を初期化("mp0ma0")するため,'@lfo'後に再設定が必要.
@lfo30 mp32c1 @lfo10 mp32c1
mpn1,n2,n3,n4 n1; 0 - 8191 (0)
n2; 0 - 8192 (0)
n3; 0 - 65535 (0)
n4; 0 - 65535 (0)
(Pitch Modulation)音程モジュレーション(ビブラート)設定.'@lfo'で設定したLFOで音程を揺らす.n1(modulation), n2(end modulation) の値は64=1半音.n3(delay), n4(changing time)はフレーム数で指定.
mp8,32,60,40 c1^1
man1,n2,n3,n4 n1; 0 - 8191 (0)
n2; 0 - 8192 (0)
n3; 0 - 65535 (0)
n4; 0 - 65535 (0)
(Amplitude Modulation)音量モジュレーション(トレモロ)設定.'@lfo'で設定したLFOで音量を揺らす.n1(modulation), n2(end modulation) の値は ams=3 で[modulation振幅値]=[tl値].モジュレーションの係り具合は,各オペレータのams値に依る.n3(delay), n4(changing time)はフレーム数で指定.
ma0,32,60,40 c1^1
'mp','ma'の引数
キーオン時,第一引数(modulation)で指定した振幅でモジュレーションがかかる.
'第一引数(modulation) < 第二引数(end modulation)' の場合,
その後,第三引数(delay)フレームの間,第一引数(modulation)で指定した振幅を維持し,
その後,第四引数(changing time)フレームで,第二引数(end modulation)で指定した振幅に変化する.
modulation parameters

テーブルエンベロープ

Statement Range Description
@fpsn 1 - 1000 (#FPS設定値) (Frame Per Second)エンベロープ/LFO変化速度の設定.'@@','na','np','nt','nf','_@@','_na','_np','_nt','_nf','po','@rr'の第2引数,'mp'/'ma'の変化時間 の実行速度をFrame per secondで設定する.
#TABLE0{(0,12)30}; q8 nt0 @fps30 c1 @fps120 c1;
@@n1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(tone envelop)音色エンベロープ.キーオン中の'@'第1引数をテーブルでコントロールする.'@'の書き換えを行う.
#TABLE0{(0,32)32}; q8 %3 @@0,5 c1^1;  // '%3@0'から'%3@31'まで5フレーム毎に音色変更.
nan1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(Amplitude ENvelop)音量エンベロープ.キーオン中の'x'指定値をテーブルでコントロールする.'x'の書き換えを行う.
#TABLE0{(128,0)10 (64,0)10|(32,0)10}; na0q8 l2cde;
npn1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(Pitch ENvelop)音程エンベロープ.キーオン中の'k'指定値をテーブルでコントロールする.'k'と独立して設定可能.
#TABLE0{(0,128,-64,0)60}; np0q8 c1;
ntn1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(noTe ENvelop)ノートエンベロープ.キーオン中の'kt'指定値をテーブルでコントロールする.'kt'と独立して設定可能.
#TABLE0{|0,4,7}; nt0 cde; // 分散コード
nfn1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(Filter ENvelop)フィルターエンベロープ.キーオン中の'@f'第1引数をテーブルでコントロールする.'@f'と独立して設定可能.
#TABLE0{|(128,64,128)20}; nf0 c1; // ワウ
_@@n1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(release tone envelop)音色リリースエンベロープ.キーオフ後にテーブルエンベロープを適用する.
#TABLE0{|1,5};q4 %5 _@@0 cdef;
_nan1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(release Amplitude ENvelop)音量リリースエンベロープ.キーオフ後にテーブルエンベロープを適用する.'x'の書き換えを行う.'@rr/s'と独立しているため,'_na'のみでリリースエンベロープをコントロールする場合はリリース時の減衰を0('s0')にする必要がある.
#TABLE0{32}; _na0 q4s0cder _na255x0c;
_npn1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(release Pitch ENvelop)音程リリースエンベロープ.キーオフ後にテーブルエンベロープを適用する.'@rr/s'の第二引数と独立して設定可能.
#TABLE0{(0,64,0)20}; _np0 q4cde;
_ntn1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(release noTe ENvelop)ノートリリースエンベロープ.キーオフ後にテーブルエンベロープを適用する.'@rr/s'の第二引数と独立して設定可能.
#TABLE0{|0,3,7}; _nt0 q4cde;
_nfn1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
(release Filter ENvelop)フィルターリリースエンベロープ.キーオフ後にテーブルエンベロープを適用する.
#TABLE0{(0,128)20}; _nf0 q2cde;
!nan1,n2 n1; 0 - 255 (255)
n2; 1 - 65535 (1)
【非推奨;TSSCPとの互換性のためのコマンド】.(Amplitude ENvelope)相対音量エンベロープ.ただし,TSSCPのnaコマンドとは挙動が異なり,リリースに対して適用されず,q/sコマンドを上書きしない.(q0s0を指定してnaコマンドを適用しているデータなどは,q8s63に書き換える事で対応可能.)
テーブルエンベロープコマンドの引数
#TABLEで定義したテーブルをエンベロープとして適用する.第一引数=未指定/255の場合,エンベロープ設定が解除される.第二引数でテーブル1エントリ辺りの再生速度をフレーム数で指定する.
#TABLE0{|0,4,7}; nt0,1c nt0,2c nt0,5c; // 第二引数でエンベロープ速度を指定する

パイプ接続

Statement Range Description
@on1,n2 n1; 0 - 2 (0)
n2; 0 - 3 (0)
(Output pipe)パイプ出力の設定.TSSCPのそれと同等.後続のシーケンスで@i,@rを指定する事でチャンネル間の FM/RingMod 接続が可能.
第1引数でモード(0;通常のステレオ出力(パイプへの出力はオフ),1;パイプ上書,2;パイプ加算)を指定.
第2引数でパイプ(0-3)を指定.モード1か2でパイプへ出力した場合,モノラルで出力され,@v, @pは無視される.
@o1 %5q8s0 cde; @i5 %5 cde; 
@in1,n2 n1; 0 - 7 (5)
n2; 0 - 3 (0)
(freqency modulating Input pipe)FM接続パイプ入力の設定.TSSCPのそれと同等.前出のシーケンスで@oを指定する事でチャンネル間のFM接続が可能
第1引数でモジュレーション(5が通常のFM音源相当,0でオフ),第2引数でパイプを指定.
@o1 %5q8s0 cde; @i3 %5 cde; 
@rn1,n2 n1; 0 - 8 (4)
n2; 0 - 3 (0)
(Ring modulating input pipe)リングモジュレーションパイプ入力の設定.前出のシーケンスで@oを指定する事でチャンネル間のリングモジュレーション接続が可能.
第1引数でモジュレーション(4が通常のリングモジュレーション相当,0でオフ),第2引数でパイプを指定.
@o1 %5q8s0 cde; @r5 %5gab;