T'SoundSystem Spec
基本機能
同時発音数 | 制限なし(コンパイラの仕様上の制限で26)。 |
音色表現力 | チェンネル毎に任意のモジュールを動的に選択可能。加えて、チャンネル間のFM変調機能搭載。ステレオ出力。 |
音程解像度 | 2種類から選択可能。 |
タイマー | テンポ制御用とエンベロープ制御用の2本の擬似タイマー割り込みを内部に持つ。 |
モジュール
PSG | 矩形波音源。もっとも単純な音色しか出せないが、処理はもっとも軽い。 |
FC | デューティ比を調節できる矩形波。ファミコンレベルの音色表現が可能。処理も軽い。 |
NOISE | ノイズ音源。 |
SIN | サイン波。FM変調をすることで、FM音源同様の表現が可能。 |
SCC | ウェーブテーブル音源。コナミ往年のSCC音源を再現可能。テーブルサイズは32。 |
音程解像度
Hz | Hz単位での表現が可能。通常のモード。 |
MSX | MSXで使用されていたPSGと同等の解像度。高音域になると、音程が荒くなる。 |
T'SoundSystem MML Manual
制御文
#TITLE <[title]> | 曲名を登録する。'\'を使えば、'>'等も含めることができる。
(例)#TITLE <RISING ZAN \<THE SAMURAI GUNMAN\>> |
#CHANNEL [n] | 曲のなかで使う最大音色数を指定する。
(例)#CHANNEL 3 |
#PRAGMA [key] | GameBoy用の曲データを作る際に使用する。詳細はとりあえず未公開。 |
#WAV [n], <[table]> | SCC用の波形テーブル n にデータを設定する。signed char×32。パラメータの詳細は後述。
(例)#WAV 0, <(0, 127),16, (-128, 127),16> |
#TABLE [n], <[table]> | エンベロープ用の波形テーブル n にデータを設定する。siged char の任意長。パラメータの詳細は上に同じ。 |
#A〜#Z | 各チャンネルのMMLデータを記述する。 |
#END | MMLの終了を示す。これ以降はコメントとして扱われる。 |
テーブルパラメータ
要素の数だけ、「,」で区切ってパラメータを列挙する。
(l, m),n の書式で、lからmまでの値をn個のパラメータで線形補完する。例えば、(1,5),5 は、1,2,3,4,5 と同じ。
MMLコマンド
制御関連
t[n] | 1≦n(120)≦512 | テンポ指定。テンポ制御用のタイマーの値を操作するので全チャンネルに影響が及ぶ。 |
$ | | 無限ループ開始位置指定。これが指定されると、チャンネルデータが最後まで演奏された時、この位置に戻る。 |
[[n] ... | ] | 2≦n(2)≦255 | ループ擬似命令。'['から']'の間をn回繰り返す。最終ループの時は、'|'まで来たらループを抜ける。'|'は省略可能。コンパイルの段階で展開される。そのため、バイナリサイズは大きくなってしまう。が、相対命令も有効。ネストは不可。
(例)[3c<] …(展開)→ c< c< c< |
/:[n] ... / ... :/ | 2≦n(2)≦255 | ループ命令。'/:'から':/'の間をn回繰り返す。最終ループの時は、'/'まで来たらループを抜ける。'/'は省略可能。ドライバレベルのループ機能なので、コンパイル時に展開される相対命令の類は繰り返されない。ネストは16重まで可能。
(例)/:2cde/fgab<:/c:/ …(展開)→ cdefgab cde <c |
{ ... } | | コメント。'{'から'}'で囲まれた部分をコメントとして扱う。ネストも可能。 |
音色関連
s[n] | 0≦n(0)≦255 | サスティン。キーオフ後にいきなり音を消さずに減衰させる。0の時はOFF。値が大きいほど減衰も急。 |
s[n],[m] | 0≦n(0)≦255, -128≦m(0)≦127 | 拡張サスティン。キーオフ後に、音量だけではなく、音程も同時に連続的に変化させる。mに対する音程の変化分は、音程モードにより、異なる。 |
% | 0≦n(0)≦255 | モジュール変更。モジュール指定に使う数値は後述。 |
@ | 0≦n(0)≦255 | 音色変更。変更の方法・有効範囲はモジュール毎に異なり、そのパラメータの有効性はコンパイル時にはチェックされないので注意。 |
音程関連
o[n] | 1≦n(4)≦8 | オクターブの指定。大きいほど高い。 |
> | | オクターブ・ダウン。コンパイラ擬似命令。 |
< | | オクターブ・アップ。コンパイラ擬似命令。
(例)cdrfgab<c |
a[n]〜g[n] | 1≦n(L)≦1024 | ラ〜ソにそれぞれ対応した音を出す。Lはl[n]で指定された値。 |
+(#)/- | | a〜gの直後に記述することで、音程を半音単位で上げ/下げする。
|
---|
r[n] | 1≦n(L)≦1024 | 休符指定。 |
---|
k[n] | -128≦n(0)≦127 | ディチューン。 |
mp[a], [b], [c], [d], [e] | 0≦a≦65535, 0≦b≦255, 0≦c≦255, -128≦d≦127, 0≦e≦255 | ピッチモジュレーション。a : Delay, b : Depth, c : Width, d : Height, e : Delta。発声後、a 単位時間後にモジュレーション開始。width 単位時間おきに height 単位音程ずつ変化する。変化量の絶対値が depth に達したら、変化の方向を逆転する。以上の処理を、delta 回繰りかえしたら、depth は 1 増える。任意のパラメータを省略可能。これを使用すると s コマンドの第 2 パラメータは無効になる。 |
音長関連
q[n] | 1≦n(MG)≦MG | 実際に演奏する音調の割合。ある長さだけ音を伸ばそうとしたとき、実際にはその長さのn/MGが演奏され、残りの時間は休符になる。(現在はMG=16で固定) |
l[n] | 1≦n(4)≦1024 | 省略時の音調指定 |
. | | 音長指定の直後に付加することで、長さを1.5倍にする。続けて複数付加できる。 |
^ | | タイ。音長のあとにさらに音長を追加する。
(例)c4^16 |
音量関連
v[n] | 1≦n(10)≦15 | 音量を指定する。数値が大きいほど音も大きい。この方法で指定すると、音の位置は中央になる。 |
v[n], [n] | 1≦n≦15 | 音量を指定する。始めの値が左、次の値が右のチャンネルの音量を示す。任意のパラメータを省略可能。
(例)v15,0 c v10, c v0,10 c v,15 c |
na[n],[m] | 0≦n(0)≦255, 0≦m(0)≦255
| 音量エンベロープ。テーブルn番のデータでエンベロープをかける。mは1回の変化が起こるまでの時間。mが大きいほど変化はゆっくりになる。いずれかの省略は不可。共に省略、またはmが0の時は機能をOFFにする。 |
モジュール
ID | 音源 | 音程モード |
0 | PSG | Hzモード |
1 | FC | Hzモード |
2 | NOISE | Hzモード |
3 | SIN | Hzモード |
4 | SCC | Hzモード |
128 | PSG | MSXモード |
129 | FC | MSXモード |
130 | NOISE | MSXモード |
131 | SIN | MSXモード |
132 | SCC | MSXモード |
FM変調
パラメータの調整のために現在機能をDisable中
based on ver.0.85