第13章 サウンドその2


三角波チャンネル

 さて次は三角波です。これは/\/\/のような形の波です。矩形波のスイープのような細かい設定はできず、低音域のベースに使われることが多いようです。 三角波を使用するには、$4015の2ビット目を1にした後に、$4008,$400A,$400Bを設定します。

 $4008はリニアカウンターの設定をするレジスタです。音を鳴らす長さを設定します。



	lda #%1111111	; カウンタ使用長さ
	sta $4008	; 三角波チャンネル制御レジスタ

 ビット7が1だとリニアカウンターを使用し、ビット6~0の数値が大きいほど長く鳴らします。 ビット7を0にすると、後で設定する長さのほうの影響だけを受けます。

 $400Aと$400Bで周波数を設定します。


	lda #%00000100	; 周波数(下位8ビット)
	sta $400A	; 三角波チャンネル1周波数レジスタ1
	lda #%11111011	; 再生時間周波数(上位3ビット)
	sta $400B	; 三角波チャンネル1周波数レジスタ2

 見ての通り、矩形波の周波数レジスタ$4002,$4003と全く同じです。三角波レジスタは以上3つです。単調な音しか出せません。

ノイズ

 最後にノイズです。ドラム音や射撃音や爆発音など、ゲームには欠かせない効果音を鳴らします。 ノイズを使用するには、$4015の3ビット目を1にして、$400C,$400E,$400Fを設定します。

 $400Cでは音の減衰を設定します。


	lda #%11101111	; 未使用長さ無効減衰無効減衰率
	sta $400C	; ノイズ制御レジスタ

 矩形波の$4000に似てますが、ビット7~6は未使用です。

 次の$400E,$400Fではタイプ、波長、長さを指定します。


	lda #%00000100	; 乱数タイプ未使用波長
	sta $400E	; ノイズ周波数レジスタ1
	lda #%11111011	; 再生時間未使用
	sta $400F	; ノイズ周波数レジスタ2

 $400Eの7ビット目は乱数タイプを選択します。0が32kbitで1が93kbitです。$400Eのビット3~0で周波数を選択します。 $4000Fのビット7~3で音の長さを指定します。

 ノイズの乱数タイプや周波数については私もよくわからないんですが、適当な値を色々入れてみると、望みの音が得られると思います。 ファミコンエミュでちょっとプログラム作ってみたいくらいなら、そういうノリでも結構いけると思います。次のサンプルを実行してみてください。

サウンドプログラム

 これをダウンロードして、nesasm giko013.asmして実行してください。 ラベルPlayBGMとPlayNoiseなどが追加した部分です。三角波のわびしげな音楽が流れ、うるさいノイズ音がビシッビシッと聞こえてきます。スプライトのX座標を動かしてみると、$400Eの値が変化してノイズ音が変わります。 けっこう使えそうな音があると思います。自分でサウンドテストツールを作ってみるのもいいんじゃないでしょうか。

 次はスタックを説明しようと思います。


トップページ 前のページ 次のページ
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送