ここでは、基本ということで、とりあえず最低限必要なことを。
とりあえず曲らしいものを作るにはここだけで十分、かも。
とりあえず曲らしいものを作るにはここだけで十分、かも。
NSF01:基本
チャンネル
音楽(NSF)@FCに書いてある通り、NSFでは 矩形波*2 + 三角波*1 + ノイズ*1(+ DPCM) の4音(5音)を用いて曲を作っていきます。 これらの音は、個別に演奏を指定していくことになります。 指定するために、各音ごとにチャンネル名が指定されており、 -A:矩形波1 -B:矩形波2 -C:三角波 -D:ノイズ -E:DPCM となっています。 例えば、矩形波1の演奏内容は A @2 v10 o5 q8 c4f4g4c4 b-2a4g4 f4e8f8g4d4f2e2 などのように指定します。 |
音高
音の高さは、音名(ドレミ)とオクターブ数で指定します。 音名は、以下のようにa~gのアルファベットで表現します。 ド=c、レ=d、ミ=e、ファ=f、ソ=g、ラ=a、シ=b、 これに加えて、アルファベットの後に+や-を付ける事で、 #や♭を表現します。つまり、 [c] [c+/d-] [d] [d+/e-] [e] [f] [f+/g-] [g] [g+/a-] [a] [a+/b-] [b] で1オクターブ中の12音を表現します。 これは、音の高さもこの順番(aやbの方がcより高い)なので注意。 次にオクターブですが、これは、o(1~7くらい?の数字)で指定します。 例:A o3 cdegcdegcgedcged //あれ、変なプレリュード 数字が大きいほど高い音です。 一度指定してやれば、以降の音は全てそのオクターブで鳴らされます。 また、現在のオクターブ数から相対的に1上げる、下げるといったことも出来ます。 1オクターブ上げる場合には > 、下げる場合には < を書けば オクターブを変更することが出来ます。 例:A o3 cdeg>cdeg>c<gedc<ged //おお、まともなプレリュード なお、同じ「o4c」を鳴らすと、三角波パートの方が矩形波パートより1オクターブ低く聞こえます。三角波パートは、矩形波パートよりオクターブの数字を1つ上げるようにしましょう。 |
休符
音を鳴らさないことを指定する音符です。 音名の代わりに r と書きましょう。 (DPCM、つまりEチャンネルの場合は w の方がいいそうです) |
音長1
音の長さは、音名の後に数字(と付点)を書くことで指定します。 数字は、「○分音符」の○の数字です。 また、付点(音長が無印○分音符の1.5倍になる)は、 数字の後に半角のピリオド . を書いて指定します。 例:c4. //ドの付点4分音符(8部音符3つ分) 数字と付点だけで表現できない音長は、複数の長さをくっつけて指定しましょう。 数字同士を ^ で繋げれば、それらを合わせた長さだけ鳴らします。 例:c2^8 //ドの2分音符+8部音符(8部音符5つ分) また、よく使う数字や見栄えの良くない数字について、 デフォルトの音長に指定することで記述を省略することが出来ます。 例1:c16d16e16g16>c16d16e16g16>c16<g16e16d16c16<g16e16d16 例2:l16 cdeg>cdeg>c<gedc<ged ↑どちらも同じ演奏情報 |
音長2
音長1の方法で指定した音長の内、実際にどれくらいの間鳴らすのかを q コマンドで指定できます。 何のことか分からないって? 例えば、 例1:A l8 crcre-rcr crcre-rcr crcre-rcr g-rfre-r<b-r> と、ずーっとスタッカート気味に演奏するとき、 「指定した音長の半分だけ鳴らす」と指定できればいいね、という話です。 書式は、 q(1~8) で、これを指定すると、以降の全ての音は 「指定した音長の初めの(数字)/8だけ音を鳴らす」ようになります。 例2:A l8 q4 cce-c cce-c cce-c g-fe-<b-> //例1と同じ また、もっと細かく「最後の○フレームだけ音を止める」という指定も出来ます。 書式は @q(数字) で、これを指定すると、以降の全ての音は 「指定した音長の(数字)フレーム前まで鳴らす」ようになります。 Cチャンネルの三角波は連続して鳴らすと全く切れ目無く演奏するので、 歯切れ良くするために@q1、@q2などを指定することが良くあります。 |
初期化
↑に書いてある内、 ・o(数字):オクターブ数を指定 ・l(数字):音長を指定しなかった際のデフォルト音長を指定 ・q(数字):実際に音を鳴らす時間を指定 の3つは、初期化情報として最初に書いておくと見やすくなります多分。 C o3 l8 @q2 C aaaaaagg aaaaaagg aaaaaagg aaaaaagg |
ちなみに、ノイズ、つまりDチャンネルは、 オクターブを指定しても意味がありません。 |