パックマニア、ワールドスタジアムなど、このタイプも高機能である。
各チャンネルにポルタメント、ソフトウェアLFO、ピッチエンベロープを重ねてかけることが可能である。
また、各ノートではキーコードとともにベロシティを指定するようになっている。
機能が豊富な割にはコマンドの種類が多くなく、
音色データ側に数多くのパラメータが組み込まれていることが特徴である。
ただし、ジャンプ系の機能は貧弱で、データの先頭に戻るコマンドと、次のサウンドコードの先頭に飛ぶコマンドぐらいしかない。 A-B-A-B' などのような楽曲を構成するには、複数のデータに分割してメインプログラム側から制御する必要がある。
タイプAと同じく『1トラック-マルチチャンネル』形式のデータとなっているが、 出力チャンネルを決めるビットフラグを毎回指定するのではなく、出力チャンネルはデータの先頭の設定のまま固定となっている。
音程と音量に対してLFOをかけることができる。
LFOの波形は、矩形波、三角波、ランダム、の3種類から選択する。
音量(TL)についてはLFOを作用させるオペレータを任意にon/off可能であるので、
特定のキャリアやモジュレータのみモジュレーションをかけることができる。
各チャンネルにつき、LFOのユニットは1個のみで、音程と音量のモジュレーションから共有されるが、
深さは個別に設定できる。
LFOの波形の種類と速度は音色パラメータから設定される。
モジュレーションの深さに関して、コマンドから深さを制御する機能と、ディレイ+深さが増加する機能が用意されている。 それぞれの機能の演算結果を加算した量がモジュレーションの深さになる。
モジュレーションの最終演算結果をスケールする機能がある。 音程と音量それぞれ個別に1/2, 1/4, 1/8…とスケーリングする設定が音色パラメータに用意されている。
キーオン後に2個、キーオフ後に1個、制御点を置くことができる。1個のノートにつき3個の期間に音程がなめらかに変化する。 音色パラメータ側で、3個の制御点として半音単位の相対音程と、3個のレート(単位時間当たりの音程変化量…半音の256分の1)が設定される。
コマンドからon/offを変更することができる。 音色パラメータによって単位時間当たりの音程変化量が与えられる。
ピッチエンベロープ、ポルタメントのピッチの変化は線形のみである。
ベロシティ(強弱)はノートごとに必ず指定される。
9段階のベロシティテーブルによって、キャリアまたはモジュレータのレベルを増減(減少のみ)できる。
テーブルは7種類用意されている。
音色パラメータによってオペレータごとにテーブルの番号が設定される。
キースケールレベルをエミュレートする機能がある。 音色パラメータによって、オペレータごとにレベルの感度が設定される。
音量は次式によって与えられ、加算のみである。
(モジュレータのTL) = (音色のTL)+(ベロシティ)+(キースケールレベル)+(LFO)
(キャリアのTL) = (音色のTL)+(ベロシティ)+(キースケールレベル)+(LFO)+(チャンネルの音量)+(フェードアウト)
タイプAと同等のコードで実装されている。機能的には変わらない。
音色パラメータには、デチューンやボリュームの感度も用意されている。 デチューンやボリュームのコマンドが実際にどの程度作用するかを調整する機能である。
データはヘッダーと演奏データに分かれている。
ヘッダーでは、トラック全体にかかわるパラメータと、論理チャンネルの構成を示す情報を与える。
ここで『論理チャンネル』とは、1つまたは複数の物理チャンネルをまとめて設定するためのグループという意味で使っている。
演奏データの中では論理チャンネルに対して設定を行うコマンドの形式になっている。
コード(和音)が1つの論理チャンネルで扱われていることが多い。
ヘッダーでは、1曲全体がどの物理チャンネルを使用するかを表すビットフラグ、全体の音量、ROMのバンク、演奏データのアドレス、
各論理チャンネルの音色番号と、各論理チャンネルがどの物理チャンネルを使用するかを表すビットフラグを与える。
ヘッダーのフォーマット
offset | content |
---|---|
$00 | 使用チャンネルのビットフラグ |
$01 | トラック全体の音量($00~$ff) |
$02 | ROM bank |
$03-$04 | 演奏データのアドレス |
$05 | 論理チャンネル1の音色番号 |
$06 | 論理チャンネル1の使用チャンネルのビットフラグ |
: | |
$13 | 論理チャンネル8の音色番号 |
$14 | 論理チャンネル8の使用チャンネルのビットフラグ |
演奏データは、コマンド+パラメータ+ステップカウント、あるいは、パラメータなしコマンド、の繰り返しの形をとる。
コマンドの下位4bitに論理チャンネルが与えられ、指定の論理チャンネルに対してコマンドが作用する。
コマンドの種類と論理チャンネルが同じ場合は、コマンドが省略されパラメータ+ステップカウントのみとなる。
ステップカウントは$00~$efの範囲のデータであり、ステップカウントの代わりにパラメータなしコマンドが続く場合もある。
$80~$efがコマンド、$00~$7fがパラメータ、$f0~$ffがパラメータなしコマンドとして扱われる。 パラメータは1byteあるいは2byteのデータである。 論理チャンネルに複数の物理チャンネルが割り当てられている場合、物理チャンネルの個数分のパラメータを与える必要がある ($c*の音色設定コマンドを除く)。
演奏データの概略
data | category |
---|---|
$00~$7f | コマンドに対するパラメータ |
$80~$ef | コマンド -ooo ---- コマンドの種類 ---- oooo 論理チャンネル |
$f0~$ff | パラメータなしコマンド |
コマンドおよびパラメータ一覧
command | parameter | content |
---|---|---|
$8* | %1 (key code) | note off |
$9* | %1 %2 (key code, velocity) | note on |
$a* | %1 oooo ----: sub command ---- oooo: parameter | 0* tie on/off 1* portamento on/off 2* pan 3* set status |
$b* | %1 | AM/PM depth2 |
$c* | %1 | tone |
$d* | %1 | volume |
$e* | %1 | detune |
パラメータなしコマンド一覧
command | content |
---|---|
$ff | end |
$fe | this sound code |
$fd | next sound code |
$f8 | step count $f0 |
$9*のノートオンのコマンドでは、キーコードの次に$ffのデータが続くとノートオフとして動作する。この場合はベロシティのデータは省略される。
コマンドの論理チャンネルに$8~$eが与えられている場合はウェーブテーブル音源トラックへのリクエストが発行される。
論理チャンネルに$fが与えられている場合はDACのトラックへのリクエストが発行される。
コマンドが$8*以外であればパラメータから$18(オクターブ2のCのキーコード)を減算したサウンドコードをリクエストする。
コマンドが$8*の場合は停止のリクエストを発行する。