====== .s ファイルとかにある音楽コードについての解説. ======
====== 1音節は96 ======
全休符
.byte W96
全音符 で Gn3の音を ベロシティ112の強さで鳴らす
.byte N96, Gn3 ,v112
.byte W96
全音符の和音 Gn3の音を ベロシティ112 , Cn4をベロシティ88 の強さで鳴らす
.byte N96, Gn3 ,v112
.byte N96, Cn4 ,v088
.byte W96
====== N96って? W96と何が違うの? ======
.byte N64, Gn3 ,v112 //Gn3 v112 を 64区間再生
.byte N24, Cn3 ,v88 //Cn3 v112 を 24区間再生
.byte W24 //ウエイト24
この場合、N24, Cn3 ,v88は、W24の後で停止するが、\\ N64の方はなり続ける。なぜなら、 64 - 24 = 40 で、40区間再生が残っている。
.byte N64, Gn3 ,v112 //Gn3 v112 を 64区間再生 (1)
.byte N24, Cn3 ,v88 //Cn3 v112 を 24区間再生 (2)
.byte W24 //ウエイト24
←ここで(2)が停止
.byte W40 //ウエイト40
←ここで(1)が停止
====== TIEって? Nxxと何が違うの? ======
.byte TIE, Gn3 ,v112
.byte N24, Gn3 ,v112
.byte W24 //ウエイト24
Nxxは、xx区間分音を鳴らすが、TIEは、EOTが来るまでならずっと鳴らし続ける.
.byte TIE, Gn3 ,v112 //(1)
.byte N24, Gn3 ,v112 //(2)
.byte W24 //ウエイト24
←ここで(2)を停止
.byte W96
.byte W96
.byte EOT
←ここで(1)を停止
====== N01 と Nがない音符は何が違うの? ======
.byte Gn3 ,v112
.byte N24, Gn3 ,v112
Nxxは指定した区間鳴らし続けるが、 Nがないものは、最初の停止後に停止される.
.byte Gn3 ,v112 //(1)
.byte W96 //
.byte N24, Gn3 ,v112 //(2)
.byte W96 //分解される N24なので、 96-24 で。
↓以下のように読み替える↓\\
.byte Gn3 ,v112 //(1)
.byte W96
← ここで (1)を停止
.byte N24, Gn3 ,v112 //(2)
.byte W24
← ここで (2)を停止
.byte W72
====== テンポって? ======
テンポは、以下の式で求まる.
midiテンポ = 60000000 / (GBA ROM内で指定されたテンポ * 2);
uint tempo = code.value * 2;
tempo = (uint)(60000000.0 / tempo);
data.Add(0x00); //テンポ変更命令4バイト
data.Add(0xFF);
data.Add(0x51);
data.Add(0x03);
U.append_big24(data, tempo); //テンポを3バイトのビッグエンディアンで書く