SiON MML reference Manual (version 0.6.5)

System operations

System commands

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" と展開される
#VMODE{...}; (n88|mdx|mck|tss|%x|%v) 全トラックの %x, %v コマンドを一括指定する.
#VMODE{%x1%v1,2}; v15cv12cv9c; // 全トラックに %x1%v1,2 が適用される
#TMODE{...}; (unit|fps|timerb)=?n 't' コマンドの基本単位を指定する. 'unit'を指定した場合, 't' コマンド値は指定値nで割られる. 'fps'は指定値nで[frame/second]値を指定(default;60)し、t コマンド値で[frames/beat].'timerb'は指定値nで動作クロック[kHz]を指定(default;4000)し,t コマンド値で192部音符長で割り込みを行う timerB OPMレジスタ値を指定する.
#TMODE{unit=100}; t10050cde; // t10050 means bpm=100.5
#TMODE{fps=60}; t30cde; // t30 means 30[frames/beat](bpm=120)
#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進数文字列で定義する.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;
#WAVCOLOR/#WAVCn{...}; 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...)
  • "[]n"で括られている場合,指定値分その中を繰り返す.
    例) #TABLE0{[0,1]3,2,3} (0,1,0,1,0,1,2,3)
  • (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;

PCM音源 音色定義

Statement Range Description
#SAMPLERn{waveID, oneShotFlag, pan, channelCount, startPoint, endPoint, loopPoint}; n;0 - 127
waveID;任意
oneShotFlag;0,1(0)
pan;-64~64(0)
channelCount;1,2(2)
startPoint;任意(-1)
endPoint;任意(-1)
loopPoint;任意(-1)
nでサンプルをアサインするノートナンバーを指定し,waveIDでSoundインスタンスを示す任意文字列を指定する.oneShotFlagが1ならゲートタイムは無視して最後まで鳴らす.panで定位設定,channelCountでサンプルのステレオ設定を行う.startPoint, endPoint, loopPointはAppendex参照.
Statement Range Description
#PCMWAVEn{waveID, samplingNote, keyRangeFrom, keyRangeTo, channelCount, startPoint, endPoint, loopPoint}; n;0 - 255
waveID;任意
samplingNote;0,1(0)
keyRangeFrom;0~127(0)
keyRangeTo;0~127(127)
channelCount;1,2(2)
startPoint;任意(-1)
startPoint;任意(-1)
loopPoint;任意(-1)
nでサンプルをアサインするPCM音声番号を指定し,waveIDでSoundインスタンスを示す任意文字列を指定する.samplingNoteでサンプリングポイントを指定し,keyRangeFrom,keyRangeToでその音のキー範囲の指定する.channelCountでサンプルのステレオ設定を行う.startPoint, endPoint, loopPointはAppendex参照.
Statement Range Description
#PCMVOICEn{volumeCenterNote, volumeKeyRange, volumeRange, panCenterNote, panKeyRange, panRange, ar, dr, sr, rr, sl}; n;0 - 255
volumeCenterNote;0-127(4)
volumeKeyRange;0-127(0)
volumeRange;-128~128(0)
panCenterNote;0-127(64)
panKeyRange;0-127(0)
panRange;-128~128
ar;0~63
dr;0~63
sr;0~63
rr;0~63
sl;0~15
nで設定するPCM音声番号を指定し volume* と pan* でノートに対する音量変化と定位変化を設定する.また最後の5引数でエンベロープカーブを設定する.詳細はAppendex参照.
再生範囲の設定
#SAMPLER と #PCMWAVE は,startPoint,endPoint,loopPoint の3引数を用いて再生位置をサンプル単位で指定できます.通常mp3音声は,仕様の都合でで先頭と末尾に無音部分が挿入されます.SiONではこの無音部分を検出して飛ばす機能を内蔵しています.
  • startPoint で再生開始位置を指定します.-1 を指定すると,先頭の無音部分を飛ばした開始位置を自動で設定します.
  • endPoint で再生終了位置を指定します.負値を指定すると末尾の無音部分を飛ばした位置から指定値分戻った終了位置を設定します.
  • loopPoint で繰り返しで戻る位置を指定します.-1 を指定すると繰り返ししません.0(startPointより前)を指定するとstartPointに設定されます.負値を指定すると末尾から指定値分戻った位置を設定します.
loopPoint を startPoint より前に設定することは出来ません.その場合 @ph コマンドを用いて再生開始位置を指定してください.
#PCMVOICEの設定
#PCMVOICE は ノートに対する音量変化と定位変化を設定します.設定した値で,再生時に volume と pan のオフセットをかけます.volumeRange と panRange は負値で逆のスロープになります.
pcm volume parameters pcm panning parameters

チャンネル間の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;
// Slot1の出力をSlot2に入力する
#EFFECT1{dist}@v128,64;#EFFECT2{delay}; %11@v0,32 cder;
エフェクタ記述用MML
#EFFECT システムコマンドでエフェクタ接続を設定する場合,エフェクタ記述専用の用MMLを使用します(下記参照).
マスターエフェクト以外は #EFFECT{}のあとに続けて "p", "@p", "@v" コマンドを使用できます."p", "@p" コマンドでそのエフェクタスロットの定位,"@v"コマンドでミキシングレベルを設定します(省略時128(最大値)).
また,"@v"コマンドの第2引数以降を用いて後続エフェクタスロットへのセンドレベルを設定することができます.例えば,Slot2 で "#EFFECT2{...}@v96,64,32;" と記述した場合,Slot2自体のミキシングレベル96,Slot3へのセンドレベル64, Slot4へのセンドレベル32となります.センドレベルは後続Slotに対してのみ設定可能です.
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;wet level[%](100)
DELAY
reverbdly1,dly2,fb,wet dly1;Long delay time[%](70)
dly1;Short delay time[%](40)
fb;Feedback[%](80)
wet;wet level[%](100)
REVERB
chorustime,fb,depth,wet time;Delay time[ms](20)
fb;Feedback[%](50)
depth;Depth[](200)
wet;wet level[%](100)
CHORUS
distpre,post,lpf,slope pre;PreGain[dB](-60)
post;PostGain[dB](-12)
lpf;LPF Freq[Hz](2400)
slope;LPF Slope[oct](1)
DISTortion
compthres,wnd,ar,rr,gain,level thres;Threshold[%](70)
wnd;Window Width[ms](50)
ar;Attack[ms](20)
rr;Release[ms](20)
gain;Max gain[db](6)
level;output level[%](50)
COMPressor
autopanfreq,depth freq;Frequency[Hz](1)
depth;Panning width[%](100)
AUTOPAN
stereowide,pan,phase wide;enhancement[%](140)
pan;Panning(0)
phase;Phase invert(0)
STEREO enhancer
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
lbfreq,slope,gain freq;Frequency[Hz](3000)
slope;slope[oct](1)
gain;gain[dB](6)
Low Booster
hbfreq,slope,gain freq;Frequency[Hz](5500)
slope;slope[oct](1)
gain;gain[dB](6)
High Booster
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
vowelout,f1,g1,f2,g2 out;output[%](100)
f1;1st freq.(800)
g1;1st gain[dB](36)
f2;2nd freq.(1300)
g2;2nd gain[dB](24)
Vowel 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(%v第二引数に依存) (16) (Volume)ボリューム.%v無指定時,v0で無音,v16で最大値,v16-32でディストーション.値省略時/初期値16.
%5 v4c v8c v12c v16c v20c v24c v28c v32c;
[()]n 1 - 32(%v第二引数に依存) (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,n2 n1=0 - 4(0)
n2=0 - 7(4)
(Volume setting)ボリューム設定.第一引数でスケール設定.0で線形,1-4で非線形(対数スケール,それぞれDynamicRange=96dB,64dB,48dB,32dB).第二引数でvコマンド最大値の指定.ディストーションしない最大値は(256>>第二引数)で計算できる.デフォルト値=4(v最大値16).この設定はヴォリュームシフトにも適用される.
%v3,1 v128c v96c v64c v32c;  // 非線形スケール(dr=48dB),v最大値128
%xn 0 - 4(0) (eXpression setting)エクスプレッション設定.引数でスケール設定.0で線形,1-4で非線形(対数スケール,それぞれDynamicRange=96dB,64dB,48dB,32dB).このスケールはテーブルエンベロープにも適用される.
%x1 x128c x120c x112c x104c;  // 非線形スケール(dr=96dB)
@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'指定値] / (256>>['%v'第二引数])) x (['x'指定値] / 128)
[非線形モードモノラル出力] = -((['v'指定値] / (256>>['%v'第二引数])) x [96,64,48,32]['%v'第一引数-1] + (['x'指定値] / 128) x [96,64,48,32]['%x'指定値-1])dB
[ステレオ左出力] = [モノラル出力] 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;    // エンベロープ指定
%fn n; 0,1,2 (0) (Filter)フィルタモード.0=ローパス, 1=バンドパス,2=ハイパスフィルタに設定.
%f2 @f96 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.
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, 4-7;0-3の位相反転, 8-255;#TABLE参照)を指定する.#TABLEを参照する場合,メンバは256個,数値範囲は0-255.このコマンドは'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;