GB音源とは、任天堂のゲームボーイに内蔵されている音源のことである。
GB音源を意識した(あるいは実機の)音源を使って作成した音楽チップチューン(chiptune)のジャンルに入る。
→Chiptune
実機で演奏する場合はLittle Sound Dj 等の専用ソフトを用いる事が多い。
GB音源の音色
音色・チャンネル数は以下のとおり。
音色 | チャンネル数 | ピコカキコでの表記 |
矩形波 (duty比:12.5% 25% 50% 75%) |
2 | @5@w1 /* 12.5% */ @5@w2 /* 25% */ @5@w4 /* 50% */ @5@w6 /* 75% */ |
波形メモリ | 1 | @10-x #WAV10 x,xxx… |
ノイズ (長周期・短周期) |
1 | @11 /* 長周期 */ @12 /* 短周期 */ |
また、GB音源はステレオ出力になっており、これらのチャンネルは、音を3段階(左・中・右)に振ることができる。
FlMMLの仕様上、ピコカキコでのGB音源完全再現はほぼ可能。
ゲームボーイ内蔵音源の詳細
上記の通り、ゲームボーイに内蔵されている音源は、矩形波(2ch)・波形メモリ(1ch)・ノイズ(1ch)をステレオ出力できる。FC音源とは似てるし、似てない。
レジスタ一覧表
アドレス | 読書き M7......0 |
ビット | 説明 |
FF10H NR10 |
R:xooooooo W:xooooooo |
XSSSHRRR |
矩形波1 制御レジスタ(スイープ)
R:周波数変更量 ・カウント満了時に、どのくらい周波数を変更するか ・値が小さいほど変化が大きい ・0だと変化無し H:周波数変更方向 ・0:上がっていく 1:下がっていく S:周波数変更タイマカウント数 ・値が小さいほど周波数変更頻度が高い X:未使用 |
FF11H NR11 |
R:ooxxxxxx W:oooooooo |
DDLLLLLL |
矩形波1 制御レジスタ(音色・長さ)
L:長さカウント値 ・値が大きいほど長さが短い D:Duty比 ・00:12.5% 01:25% 10:50% 11:75% |
FF12H NR12 |
R:oooooooo W:oooooooo |
VVVVDCCC |
矩形波1 制御レジスタ(音量)
C:エンベロープ速度 ・値が小さいほど変化が速くなる ・0だと変化無し D:音量変更方向 ・0:小さくなっていく 1:大きくなっていく V:エンベロープ初期音量 ・エンベロープ開始時の音量の指定 ・キーオン中にここだけ変えても、設定通りの音量にならない |
FF13H NR13 |
R:xxxxxxxx W:oooooooo |
FFFFFFFF |
矩形波1 制御レジスタ(周波数下位)
F:周波数(0-7bit) ・値が大きいほど高音になる |
FF14H NR14 |
R:xoxxxxxx W:ooxxxooo |
OCXXXFFF |
矩形波1 制御レジスタ(周波数上位・長さ・キーオン)
F:周波数(8-10bit) ・値が大きいほど高音になる X:未使用 C:長さカウンタ有効フラグ(1:有効 0:無効) O:キーオンフラグ ・このビットを立たせることで、キーオン(音を鳴らす)できる。 |
FF15H NR20 |
R:xxxxxxxx W:xxxxxxxx |
XXXXXXXX |
矩形波2 制御レジスタ(未使用)
X:未使用 |
FF16H NR21 |
R:xxxxxxxx W:ooxxxxxx |
DDLLLLLL |
矩形波2 制御レジスタ(音色・長さ)
L:長さカウント値 ・値が大きいほど長さが短い D:Duty比 ・00:12.5% 01:25% 10:50% 11:75% |
FF17H NR22 |
R:oooooooo W:oooooooo |
VVVVDCCC |
矩形波2 制御レジスタ(音量)
C:エンベロープ速度 ・値が小さいほど変化が速くなる ・0だと変化無し D:音量変更方向 ・0:小さくなっていく 1:大きくなっていく V:エンベロープ初期音量 ・エンベロープ開始時の音量の指定 ・キーオン中にここだけ変えても、設定通りの音量にならない |
FF18H NR23 |
R:xxxxxxxx W:oooooooo |
FFFFFFFF |
矩形波2 制御レジスタ(周波数下位)
F:周波数(0-7bit) ・値が大きいほど高音になる |
FF19H NR24 |
R:xoxxxxxx W:ooxxxooo |
OCXXXFFF |
矩形波2 制御レジスタ(周波数上位・長さ・キーオン)
F:周波数(8-10bit) ・値が大きいほど高音になる X:未使用 C:長さカウンタ有効フラグ(1:有効 0:無効) O:キーオンフラグ ・このビットを立たせることで、キーオン(音を鳴らす)できる。 |
FF1AH NR30 |
R:oxxxxxxx W:oxxxxxxx |
MXXXXXXX |
波形メモリ 制御レジスタ(マスター)
X:未使用 M:波形メモリチャンネル有効フラグ(0:無効 1:有効) ・0だと、音が鳴らない。 |
FF1BH NR31 |
R:xxxxxxxx W:oooooooo |
LLLLLLLL |
波形メモリ 制御レジスタ(長さ)
L:長さカウント値 ・値が大きいほど長さが短い |
FF1CH NR32 |
R:xooxxxxx W:xooxxxxx |
XVVXXXXX |
波形メモリ 制御レジスタ(音量)
X:未使用 V:音量 ・00:ミュート 01:1/1 10:1/2 11:1/4 |
FF1DH NR33 |
R:xxxxxxxx W:oooooooo |
FFFFFFFF |
波形メモリ 制御レジスタ(周波数下位)
F:周波数(0-7bit) ・値が大きいほど高音になる |
FF1EH NR34 |
R:xoxxxxxx W:ooxxxooo |
OCXXXFFF |
波形メモリ 制御レジスタ(周波数上位・長さ・キーオン)
F:周波数(8-10bit) ・値が大きいほど高音になる X:未使用 C:長さカウンタ有効フラグ(1:有効 0:無効) O:キーオンフラグ ・このビットを立たせることで、キーオン(音を鳴らす)できる。 |
FF1FH NR40 |
R:xxxxxxxx W:xxxxxxxx |
XXXXXXXX |
ノイズ 制御レジスタ(未使用)
X:未使用 |
FF20H NR41 |
R:xxxxxxxx W:xxoooooo |
XXLLLLLL |
ノイズ 制御レジスタ(長さ)
L:長さカウント値 ・値が大きいほど長さが短い X:未使用 |
FF21H NR42 |
R:oooooooo W:oooooooo |
VVVVDCCC |
ノイズ 制御レジスタ(音量)
C:エンベロープ速度 ・値が小さいほど変化が速くなる ・0だと変化無し D:音量変更方向 ・0:小さくなっていく 1:大きくなっていく V:エンベロープ初期音量 ・エンベロープ開始時の音量の指定 ・キーオン中にここだけ変えても、設定通りの音量にならない |
FF22H NR43 |
R:oooooooo W:oooooooo |
OOOORFFF |
ノイズ 制御レジスタ(周波数)
F:ノイズ周波数1(カウント指定) ・値が小さいほど周波数が高くなる ・周波数は1/nされる。nに入る値は、周波数テーブルから 引き出される。 (値0から順に、1, 2, 4, 6, 8, 10, 12, 14) R:長周期/短周期 ・0で長周期 O:ノイズ周波数2(オクターブ指定) ・値が小さいほど周波数が高くなる ・値が1増えるごとに、周波数は1/2,1/4,1/8…していく |
FF23H NR44 |
R:xoxxxxxx W:ooxxxxxx |
OCXXXXXX |
ノイズ 制御レジスタ(長さ・キーオン)
X:未使用 C:長さカウンタ有効フラグ(1:有効 0:無効) O:キーオンフラグ ・このビットを立たせることで、キーオン(音を鳴らす)できる。 |
FF24H NR50 |
R:oooooooo W:oooooooo |
ELLLERRR |
全体音量制御レジスタ
R:右音量 ・値が大きいほど音量が大きい E:右出力有効フラグ L:左音量 ・値が大きいほど音量が大きい E:左出力有効フラグ |
FF25H NR51 |
R:oooooooo W:oooooooo |
NW21NW21 |
各チャンネル出力制御レジスタ
1:矩形波1-右出力 有効フラグ (1:ON 0:OFF) 2:矩形波2-右出力 有効フラグ (1:ON 0:OFF) W:波形メモリ-右出力 有効フラグ (1:ON 0:OFF) N:ノイズ-右出力 有効フラグ (1:ON 0:OFF) 1:矩形波1-左出力 有効フラグ (1:ON 0:OFF) 2:矩形波2-左出力 有効フラグ (1:ON 0:OFF) W:波形メモリ-左出力 有効フラグ (1:ON 0:OFF) N:ノイズ-左出力 有効フラグ (1:ON 0:OFF) |
FF26H NR52 |
R:oxxxoooo W:oxxxxxxx |
R:SXXXNW21 W:SXXXXXXX |
各チャンネルステータス/サウンド有効フラグレジスタ
1:(読み専)矩形波1 ステータスフラグ (1:ON 0:OFF) 2:(読み専)矩形波2 ステータスフラグ (1:ON 0:OFF) W:(読み専)波形メモリ ステータスフラグ (1:ON 0:OFF) N:(読み専)ノイズ ステータスフラグ (1:ON 0:OFF) S:全サウンド有効フラグ (1:ON 0:OFF) |
FF30H-FF3FH | R:oooooooo W:oooooooo |
WWWWWWWW |
波形メモリデータ
|
CH1・CH2:矩形波
このチャンネルで出せる矩形波のDuty比は、12.5% 25% 50% 75%の4種類。波形は以下の表を参照。
Duty比 | 波形 |
12.5% | _| ̄|_______| ̄|_______| ̄|_______ |
25% | _| ̄ ̄|______| ̄ ̄|______| ̄ ̄|______ |
50% | _| ̄ ̄ ̄ ̄|____| ̄ ̄ ̄ ̄|____| ̄ ̄ ̄ ̄|____ |
75% | _| ̄ ̄ ̄ ̄ ̄ ̄|__| ̄ ̄ ̄ ̄ ̄ ̄|__| ̄ ̄ ̄ ̄ ̄ ̄|__ |
CH1の矩形波チャンネルにはスイープ機能があり、周波数を変化させることが出来る。
スイープレジスタ(FF10H)での指定することにより、周波数を上昇させたり下降させたりする事が出来る。
周波数更新時、以下の計算方法で周波数の上昇・下降を行う。
FC音源の仕様と同じように見えるが、比べると実は全然違う。 GB音源の場合、周波数レジスタ値はFC音源のときとは逆で、値が多いほど周波数が高くなるため、レジスタ値が大きいほど周波数の変化が大きくなり、レジスタ値が小さいほど周波数の変化が小きくなる。
FC音源では、キーオンの仕様上、周波数レジスタ9bit目以降の書き換えでプチノイズが出るが、GB音源ではキーオンの仕様が違うため、周波数レジスタ9bit目以降を変更してもプチノイズは乗らない。GB音源はFC音源と比べて、ソフトウェアによる周波数変更に強いといえる。
矩形波は、キーオン時に波形位置がリセットされないが、波形は若干乱れる。
CH3:波形メモリ
波形データはFF30H-FF3FHで指定する。 サンプル数は32、量子化ビット数は4、上位4bit→下位4bit→次の上位4bit…の順で出力される。
波形データの読み書きは、波形メモリの再生を停止しているときに行う必要がある。
音量は、4段階で変更できる。(1, 1/2, 1/4, OFF) ただし、波形データをビットシフトする形で音量を下げているため、失われた下位ビットの分波形が変わる。
CH4:ノイズ
ノイズ音の周波数は、線形帰還シフトレジスタによる擬似乱数で出ている。
//レジスタの初期値
reg = 0xffff;
output = 1;
//以下の2行を回す。
// shortFreqは、短周期フラグ。1にすると有効になる。
// これで得られるoutputの値が、ノイズチャンネルの波形。
if(reg == 0)reg = 1; //一応
reg += reg + (((reg >> (shortFreq ? 6 : 14)) ^ (reg >> (shortFreq ? 5 : 13))) & 1);
output ^= reg & 1;
「ザー」という音の長周期と、「ギー」という音の低周期が出せる。
ノイズのパターンは、長周期ノイズが32767bit。低周期ノイズは127bit。
ゲームボーイのノイズ音はFC音源とは違って、キーオン毎にレジスタがリセットされるため、長周期・短周期ともに常に同じ音が出る。 これによって、FC音源と比べて、短周期ノイズをドラム音として使いやすくなっている。(ドクターマリオ・ヨッシーのパネポン等)
エンベロープ
GB音源の矩形波・ノイズチャンネルでは、音量をハードウェアで変化させることが出来る。
GB音源のハードウェアエンベロープは、FC音源と比べると強化されている。 初期ボリュームが指定でき、その音量から増幅・減衰させることができる。
(FC音源では、初期ボリュームは最大固定で、変化は減衰のみ)
矩形波・ノイズチャンネルでは、音量レジスタ(FF12H FF17H FF21H)を変更した後、反映のためにキーオンしなければならない。
しかし、キーオンすると、矩形波チャンネルでは波形が若干乱れ、ノイズチャンネルではレジスタがリセットされてしまうため、GB音源はFC音源と比べて、ソフトウェアエンベロープに弱い。そのため、矩形波・ノイズチャンネルでソフトウェアエンベロープを使用するソフトは、ファミコンと比べると少ない。
ソフトウェアエンベロープを使用するソフトの多くは、音量を変化する頻度を少なくしたり、一部のエンベロープをハードウェアに任せるなど、ノイズを目立たせないように工夫されていた。
キーオンせずに音量レジスタだけ変更すると、訳の分からない変な挙動(GBSOUND.TXTではこれを"ZOMBIE MODE"と呼んでいる)によって、期待通りの音量にならない。 しかし、この訳の分からない"ZOMBIE MODE"を逆に利用してソフトウェアエンベロープさせている、「P-マンGB」という変態ソフトが存在する。
波形メモリチャンネルは、音量レジスタの変更のみでも大丈夫なのでノイズは発生しない。
FC音源との違い
つまり、ファミコンの音源と比べるとどこが違うのか。大きな違いは以下の通り。
- ステレオである。(ファミコンはモノラル)
- 波形メモリ音源があり、その音量も変えられる。(ファミコンは三角波・音量固定)
- PCM関連の音源が無い。(ファミコンはDPCMがある)
- 全体の出力が左右別々に調整できる。これにより、曲のフェードアウトなども容易に。(ファミコンにはない)
細かい違いは以下の通り。
- ハードエンベロープに強く、ソフトエンベロープに弱い。
- スイープできるのは矩形波1chのみ。しかも変化の仕方が違う。
- ノイズ音で指定できる周波数の数が増えた。
- ノイズ音の波形はいつ鳴らしても同じ。これで、短周期も扱いやすい。
- キーオンの仕様がフラグ式になった。
- 周波数レジスタ値の仕様が正反対になった。
それ以外は、大体FC音源と同じになっている。
関連動画
関連項目
- 32
- 0pt