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

音符を表します。

構文

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

パラメータ

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

解説

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

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

  • 音量: チャネルの左右の音量(そのまま)
  • ピッチ: 後述のピッチ値
  • ソース・ナンバー、ADSR1, ADSR2: チャネルの設定値
  • GAIN: $7F

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

長さとキーオフ

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

ピッチの計算

ピッチは、(ノート・ナンバー + トランスポーズ値) の下位7ビットを添字としてピッチ定義テーブル($11E1)を引き、チューニング値で補正して求めます。
ピッチ値はDSPのピッチレジスタの値で、$1000 のときに波形サンプルが原音の速さで再生されます。

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

ピッチ定義テーブルの範囲は添字 0~61 です。

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

添字ノート・ナンバー音名ピッチ値
00x80休符$0000
10x81C3$0200
20x82C#3$021E
30x83D3$023F
40x84D#3$0261
50x85E3$0285
60x86F3$02AB
70x87F#3$02D4
80x88G3$02FF
90x89G#3$032D
100x8AA3$035D
110x8BA#3$0390
120x8CB3$03C7
130x8DC4$0400
140x8EC#4$043D
150x8FD4$047D
160x90D#4$04C2
170x91E4$050A
180x92F4$0557
190x93F#4$05A8
200x94G4$05FE
210x95G#4$065A
220x96A4$06BA
230x97A#4$0721
240x98B4$078D
250x99C5$0800
260x9AC#5$087A
270x9BD5$08FB
280x9CD#5$0984
290x9DE5$0A14
300x9EF5$0AAE
310x9FF#5$0B50
320xA0G5$0BFD
330xA1G#5$0CB3
340xA2A5$0D74
350xA3A#5$0E41
360xA4B5$0F1A
370xA5C6$1000
380xA6C#6$10F4
390xA7D6$11F6
400xA8D#6$1307
410xA9E6$1429
420xAAF6$155C
430xABF#6$16A1
440xACG6$17F9
450xADG#6$1966
460xAEA6$1AE9
470xAFA#6$1C82
480xB0B6$1E34
490xB1C7$2000
500xB2C#7$21E7
510xB3D7$23EB
520xB4D#7$260E
530xB5E7$2851
540xB6F7$2AB7
550xB7F#7$2D41
560xB8G7$2FF2
570xB9G#7$32CC
580xBAA7$35D1
590xBBA#7$3904
600xBCB7$3C68
610xBDC8$3FFF

参照

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