ノートイベント 0x81~0xFF

音符を表します。

構文

byte note, byte duration     // 通常
byte note, ushort duration   // 16ビット・デュレーション・モード時
byte note                    // デフォルト・デュレーション・モード時

パラメータ

パラメータ型内容
notebyteノート・ナンバー(0x81~0xFF)。0xE0~0xFF は特殊ノート
durationbyte / ushort長さ(ティック)。
デフォルト・デュレーション・モード時は省略する。
16ビット・デュレーション・モード時はビッグエンディアンの16ビット値

解説

ノート・ナンバーとチャネルの設定からピッチを求めてDSPのチャネルをキーオンし、duration の間待機します。SE割込中のBGMチャネルでは、DSPへの書き込みは行わずに待機だけを行います。

キーオン時には、次の値がDSPへ書き込まれます。

  • 音量: チャネルの左右の音量(音量倍率 $04B6 を掛けた値)
  • ピッチ: 後述のピッチ値
  • ソース・ナンバー、ADSR1, ADSR2: チャネルの設定値
  • GAIN: $7F

同時に、ピッチベンド・ビブラートが有効な場合は、それぞれのカウンタが初期化されます。

長さとキーオフ

ノートの残りティック数は1ティックごとに1ずつ減り、残りが1になった時点でキーオフ、0になった時点で次のイベントを読み込みます。つまり、長さ n のノートは n−1 ティックの間発音し、最後の1ティックは消音(リリース)になります。
長さに1を指定した場合はキーオフが行われないため、次のノートとの間に消音は入りません。長さに0を指定した場合は1を指定した場合と同じ動作になります。

ピッチの計算

ピッチは、(ノート・ナンバー + 36 + トランスポーズ値) の下位7ビットを添字としてピッチ定義テーブル($1199)を引き、チューニング値で補正して求めます。
DKCとの互換性のためにDKC2/3のドライバでは鍵盤全体が3オクターブスライドされています。
ノート0x81がC3になるように設定すればDKC互換、ノート0x81がC0になるように設定すればピッチテーブルのほぼ全域を使用できます。
ピッチ値はDSPのピッチレジスタの値で、$1000 のときに波形サンプルが原音の速さで再生されます。

チューニング値 t が0でない場合、ピッチ値 P は P + P × t ÷ 1024 に補正されます。

ピッチ定義テーブルの範囲は添字 0~97 です。
下の表の音名は、ノート・ナンバー 0x81 を C0 とした場合の便宜上のものです。実際の音程は波形サンプルによって異なります。
ただし、原則としてこの表のオクターブ関係になるようにトランスポーズを設定しておくと分かりやすくなります。

添字ノート・ナンバー音名ピッチ値
00x80休符$0000
10x81C0$0040
20x82C#0$0044
30x83D0$0048
40x84D#0$004C
50x85E0$0051
60x86F0$0055
70x87F#0$005B
80x88G0$0060
90x89G#0$0066
100x8AA0$006C
110x8BA#0$0072
120x8CB0$0079
130x8DC1$0080
140x8EC#1$0088
150x8FD1$0090
160x90D#1$0098
170x91E1$00A1
180x92F1$00AB
190x93F#1$00B5
200x94G1$00C0
210x95G#1$00CB
220x96A1$00D7
230x97A#1$00E4
240x98B1$00F2
250x99C2$0100
260x9AC#2$010F
270x9BD2$011F
280x9CD#2$0130
290x9DE2$0143
300x9EF2$0156
310x9FF#2$016A
320xA0G2$0180
330xA1G#2$0196
340xA2A2$01AF
350xA3A#2$01C8
360xA4B2$01E3
370xA5C3$0200
380xA6C#3$021E
390xA7D3$023F
400xA8D#3$0261
410xA9E3$0285
420xAAF3$02AB
430xABF#3$02D4
440xACG3$02FF
450xADG#3$032D
460xAEA3$035D
470xAFA#3$0390
480xB0B3$03C7
490xB1C4$0400
500xB2C#4$043D
510xB3D4$047D
520xB4D#4$04C2
530xB5E4$050A
540xB6F4$0557
550xB7F#4$05A8
560xB8G4$05FE
570xB9G#4$065A
580xBAA4$06BA
590xBBA#4$0721
600xBCB4$078D
610xBDC5$0800
620xBEC#5$087A
630xBFD5$08FB
640xC0D#5$0984
650xC1E5$0A14
660xC2F5$0AAE
670xC3F#5$0B50
680xC4G5$0BFD
690xC5G#5$0CB3
700xC6A5$0D74
710xC7A#5$0E41
720xC8B5$0F1A
730xC9C6$1000
740xCAC#6$10F4
750xCBD6$11F6
760xCCD#6$1307
770xCDE6$1429
780xCEF6$155C
790xCFF#6$16A1
800xD0G6$17F9
810xD1G#6$1966
820xD2A6$1AE9
830xD3A#6$1C82
840xD4B6$1E34
850xD5C7$2000
860xD6C#7$21E7
870xD7D7$23EB
880xD8D#7$260E
890xD9E7$2851
900xDAF7$2AB7
910xDBF#7$2D41
920xDCG7$2FF2
930xDDG#7$32CC
940xDEA7$35D1
950xDFA#7$3904
96-B7$3C68
97-C8$3FFF

特殊ノート

ノートイベント 0xE0 および 0xE2~0xFF は、コマンド 0x1C で設定したノート・ナンバー($0C+x)の音符として扱われます。
ノートイベント 0xE1 は、コマンド 0x1D で設定したノート・ナンバー($14+x)の音符として扱われます。
置き換えた後のノート・ナンバーにも、通常どおり36とトランスポーズ値が加算されます。

参照

シーケンスデータの構造
休符イベント
コマンド 0x06
コマンド 0x12
コマンド 0x13
コマンド 0x2B