(有)未来検索ブラジルが運営するあらゆる言葉についての記事を閲覧・編集したり、コメントをしたりするサイトです。

単語記事: GBA音源

編集

GBA音源とは、任天堂ゲームボーイアドバンスに内蔵されている音のことである。
GBA音源を意識した(あるいは実機の)音を使って作成した音楽チップチューン(chiptune)のジャンルに入る。
Chiptune

実機で演奏する場合は販のフラッシュカートリッジなどを使用しフリーソフトウェアを利用する事が多いだろう。

GBA音源の音色

音色・チャンネル数は以下のとおり。

音色 チャンネル ピコカキコでの表記
矩形波
(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…
@13-x #WAV13 x,xxxxxx
ノイズ
(長周期・短周期)
1 @11 /* 長周期 */
@12 /* 短周期 */
PCM
2 @13-x #WAV13 x,xxxxxx
@9-x #WAV9 x,xx,xxx…
など

FlMML仕様上、ピコカキコでのGBA音源完全再現はほぼ可…だと思われる。

 

GBA内蔵音源の詳細

ゲームボーイアドバンスに内蔵されている音は、従来のゲームボーイ互換の矩形波(2ch)・波形メモリ(1ch)・ノイズ(1ch)とGBAで追加されたPCM(2ch)である。FC音源とは似てるし、似てない。どちらかと言うとSFCに近いかも知れないし、そうでもないかも知れない。

以下、GB音源の記事などを参考に詳細を記述。

レジスタ一覧表

R:読み込み W:書き込み oは可で、xは不可能

アドレス 読書
ビット 説明
0x04000060
SG10_L
R:xxxxxxxx_xooooooo
W:xxxxxxxx_xooooooo

XXXXXXXX_XSSSHRRR 矩形波1 制御レジスタスイープ)
R:周波数変更量
 ・カウント満了時に、どのくらい周波数を変更するか
 ・値が小さいほど変化が大きい
 ・0だと変化無し
H:周波数変更方向
 ・0:上がっていく 1:下がっていく
S:周波数変更タイマカウント数
 ・値が小さいほど周波数変更頻度が高い
X:未使用
0x04000062
SG10_H
R:oooooooo_ooxxxxxx
W:oooooooo_oooooooo

VVVVDCCC_DDLLLLLL 矩形波1 制御レジスタ(音量・音色・長さ)
L:長さカウント値
 ・値が大きいほど長さが短い

D:Duty
 ・00:12.5% 01:25% 10:50% 11:75%
C:エンベロープ速度
 ・値が小さいほど変化が速くなる
 ・0だと変化無し

D:音量変更方向
 ・0:小さくなっていく 1:大きくなっていく
V:エンベロープ初期音量
 ・エンベロープ開始時の音量の
 ・キーオン中にここだけ変えても、設定通りの音量にならない
0x04000064
SG11
R:xoxxxxxx_xxxxxxxx
W:ooxxxooo_oooooooo

OCXXXFFF_FFFFFFFF 矩形波 制御レジスタ(周波数・長さ・キーオン
F:周波数
 ・値が大きいほど高音になる
X:未使用
C:長さカウンタ有効フラグ(1:有効 0:無効)
Oキーオンフラグ
 ・このビットを立たせることで、キーオン(音を鳴らす)できる。
0x04000068
SG20
R:oooooooo_ooxxxxxx
W:oooooooo_oooooooo

VVVVDCCC_DDLLLLLL 矩形波2 制御レジスタ(音量・音色・長さ)
L:長さカウント値
 ・値が大きいほど長さが短い

D:Duty
 ・00:12.5% 01:25% 10:50% 11:75%
C:エンベロープ速度
 ・値が小さいほど変化が速くなる
 ・0だと変化無し

D:音量変更方向
 ・0:小さくなっていく 1:大きくなっていく
V:エンベロープ初期音量
 ・エンベロープ開始時の音量の
 ・キーオン中にここだけ変えても、設定通りの音量にならない
0x0400006C
SG21
R:xoxxxxxx_xxxxxxxx
W:ooxxxooo_oooooooo

OCXXXFFF_FFFFFFFF 矩形波2 制御レジスタ(周波数・長さ・キーオン
F:周波数
 ・値が大きいほど高音になる
X:未使用
C:長さカウンタ有効フラグ(1:有効 0:無効)
Oキーオンフラグ
 ・このビットを立たせることで、キーオン(音を鳴らす)できる。
0x04000070
SG30_L
R:xxxxxxxx_oooxxxxx
W:xxxxxxxx_oooxxxxx

XXXXXXXX_OBSXXXXX 波形メモリ 制御レジスタ(波形再生)
X:未使用
S波形メモリチャンネルサンプル数(0:32サンプル 1:64サンプル)

B波形メモリ再生バンク選択
 ・波形メモリへの読み書きは選択していないバンクが対となる。
・64サンプルを選択しているときにキーオンまたはキーオン中に
  バンク切り替えを行うと、ここで定したバンクが先に鳴る。
O波形メモリチャンネル有効フラグ(0:無効 1:有効)
 ・0だと、音が鳴らない。
0x04000072
SG30_H
R:oooxxxxx_xxxxxxxx
W:oooxxxxx_oooooooo

VVVXXXXX_LLLLLLLL 波形メモリ 制御レジスタ(音量・長さ)
L:長さカウント値
 ・値が大きいほど長さが短い
X:未使用
V:音量
 ・000:ミュート 001:1/1 010:1/2 011:1/4
 ・100-111:3/4
0x04000074
SG31
R:xoxxxxxx_xxxxxxxx
W:ooxxxooo_oooooooo

OCXXXFFF_FFFFFFFF 波形メモリ 制御レジスタ(周波数・長さ・キーオン
F:周波数
 ・値が大きいほど高音になる
X:未使用
C:長さカウンタ有効フラグ(1:有効 0:無効)
Oキーオンフラグ
 ・このビットを立たせることで、キーオン(音を鳴らす)できる。
0x04000078
SG40
R:oooooooo_xxxxxxxx
W:oooooooo_xxoooooo

VVVVDCCC_XXFFFFFF ノイズ 制御レジスタ(音量・長さ)
L:長さカウント値
 ・値が大きいほど長さが短い

X:未使用
C:エンベロープ速度
 ・値が小さいほど変化が速くなる
 ・0だと変化無し

D:音量変更方向
 ・0:小さくなっていく 1:大きくなっていく
V:エンベロープ初期音量
 ・エンベロープ開始時の音量の
 ・キーオン中にここだけ変えても、設定通りの音量にならない
0x0400007C
SG41
R:xoxxxxxx_oooooooo
W:ooxxxxxx_oooooooo

OCXXXXXX_OOOORFFF ノイズ 制御レジスタ(周波数・長さ・キーオン
Fノイズ周波数1(カウント定)
 ・値が小さいほど周波数が高くなる
 ・実際に出される周波数(Hz)は、
     524288÷O÷2^(F+1)
   で計算することができる。
  (オクターブ定が 0 の場合 O=0.5 に置き換える)
R:長周期/短周期
 ・0で長周期
Oノイズ周波数2(オクターブ定)
 ・値が小さいほど周波数が高くなる
 ・値が1増えるごとに、周波数は1/2,1/4,1/8…していく

X:未使用
C:長さカウンタ有効フラグ(1:有効 0:無効)
Oキーオンフラグ
 ・このビットを立たせることで、キーオン(音を鳴らす)できる。
0x04000080
SGCNT0_L
R:oooooooo_xoooxooo
W:oooooooo_xoooxooo
NW21NW21_XLLLXRRR ゲームボーイ互換チャンネル制御レジスタ
R:右音量
L:左音量
 ・値が大きいほど音量が大きい
X:未使用
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
0x04000082
SGCNT0_H
R:oooooooo_xxxxoooo
W:oooooooo_xxxxoooo
FTLRFTLR_XXXXBAVV サウンド制御レジスタ
Vゲームボーイ互換チャンネル音量
 ・00:1/4 01:1/2 10:1/1 11:使用禁止
APCM A 音量
 ・0:1/2 1:1/1
BPCM B 音量
 ・0:1/2 1:1/1
X:未使用
RPCM A 右出 有効フラグ (1:ON 0:OFF

LPCM A 左出 有効フラグ (1:ON 0:OFF

TPCM A タイマー選択 (1:タイマー1 0:タイマー0)

FPCM A FIFO リセット (1:リセット

RPCM B 右出 有効フラグ (1:ON 0:OFF

LPCM B 左出 有効フラグ (1:ON 0:OFF

TPCM B タイマー選択 (1:タイマー1 0:タイマー0)

FPCM B FIFO リセット (1:リセット
0x04000084
SGCNT1
R:xxxxxxxx_oxxxoooo
W:xxxxxxxx_oxxxxxxx

XXXXXXXX_SXXXNW21 チャンネルステータス/サウンド有効フラグレジスタ
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
0x04000088
SGBIAS
R:ooxxxxoo_oooooooo
W:ooxxxxoo_oooooooo

RRXXXXBB_BBBBBBBB サウンドPWMコントロール
B:バイアスレベル
 ・通常は変更する必要なし (初期値:200h)
X:未使用
Rサンプリングレート
 ・00: 9bit/ 32768Hz (デフォルトPCMに最適)
  01: 8bit/ 65536Hz
  10: 7bit/131072Hz
  11: 6bit/262144Hz (GB互換チャンネルに最適)
0x04000090
-0x0400009F
R:oooooooo_oooooooo
W:oooooooo_oooooooo

WWWWWWWW_WWWWWWWW 波形メモリデータ
W:波形データ (符号無し4bit)
 ・1バイトMSB→LSB
  2バイトMSB→LSB→・・・と続く
・読み書きは再生が行われてない方のバンクへ行われる
0x040000A0
SIGFIFOA_L
R:xxxxxxxx_xxxxxxxx
W:oooooooo_oooooooo

11111111_00000000 PCM A FIFO レジスタ(下位)
0データ0 (符号付き8bit)
1データ1 (符号付き8bit)
 ・通常はタイマー0または1とDMA1を利用して転送を行う。
0x040000A2
SIGFIFOA_H
R:xxxxxxxx_xxxxxxxx
W:oooooooo_oooooooo

33333333_22222222 PCM A FIFO レジスタ(上位)
2データ2 (符号付き8bit)
3データ3 (符号付き8bit)
 ・通常はタイマー0または1とDMA1を利用し転送を行う。
0x040000A4
SIGFIFOB_L
R:xxxxxxxx_xxxxxxxx
W:oooooooo_oooooooo

11111111_00000000 PCM B FIFO レジスタ(下位)
0データ0 (符号付き8bit)
1データ1 (符号付き8bit)
 ・通常はタイマー1または0とDMA2を利用して転送を行う。
0x040000A6
SIGFIFOB_H
R:xxxxxxxx_xxxxxxxx
W:oooooooo_oooooooo

33333333_22222222 PCM B FIFO レジスタ(上位)
2データ2 (符号付き8bit)
3データ3 (符号付き8bit)
 ・通常はタイマー1または0とDMA2を利用し転送を行う。

アドレス 読書
ビット 説明
0x040000BC
DM1SAD_L
0x040000C8
DM2SAD_L
R:xxxxxxxx_xxxxxxxx
W:oooooooo_oooooooo

SSSSSSSS_SSSSSSSS 転送アドレスレジスタ
S転送アドレス (28bit)
・再生するPCMバッファを設定。ROM内の定も可
DMA転送を開始してもこの値は変化しない。
X:未使用
0x040000BE
DM1SAD_H
0x040000CA
DM2SAD_H
R:xxxxxxxx_xxxxxxxx
W:xxxxoooo_oooooooo

XXXXSSSS_SSSSSSSS
0x040000C0
DM1DAD_L
0x040000CC
DM2DAD_L
R:xxxxxxxx_xxxxxxxx
W:oooooooo_oooooooo

DDDDDDDD_DDDDDDDD 転送アドレスレジスタ
D転送アドレス (27bit)
PCM用途でDMAを使う場合は、
 0x040000A0 または 0x040000A4 に設定

X:未使用
0x040000C2
DM1DAD_H
0x040000CE
DM2DAD_H
R:xxxxxxxx_xxxxxxxx
W:xxxxxooo_oooooooo

XXXXXDDD_DDDDDDDD
0x040000C4
DM1CNT_L
0x040000D0
DM2CNT_L
R:xxxxxxxx_xxxxxxxx
W:xxoooooo_oooooooo

XXCCCCCC_CCCCCCCC 転送カウントレジスタ
C転送回数 (14bit)
転送回数を定する。1回の転送は16bitまたは32bit。
PCM用途では、この値は利用されない。

X:未使用
0x040000C6
DM1CNT_H
0x040000D2
DM2CNT_H
R:ooooxooo_oooxxxxx
W:ooooxooo_oooxxxxx

EITTXWRs_sddXXXXX 転送コントロールレジスタ
X:未使用
d転送アドレス制御
・0:増加、1:減少、2:固定、3:増加/リロード
PCM用途の場合は固定に設定しておく。

s転送アドレス制御
・0:増加、1:減少、2:固定、3:未使用

RDMAリピート
PCM用途では有効に設定 (1:ON 0:OFF)
W転送単位
PCM用途では常に32bitになる。(1:32bit 0:16bit)
X:未使用
T転送開始タイミング
・0:すぐに、1:VBlank、2:HBlank、3:特殊
PCM用途では「3:特殊」に設定しておく。
I:割り込み制御
転送完了時に割り込み制御 (1:ON 0:OFF)
PCM用途ではDMAリピートが有効な為利用不可(未詳)。

EDMAイネーブル
定したタイミング転送を開始する。
・リピートOFFの場合は転送終了でフラグが下がる
TIMER0から
0x04000100
0x04000104
0x04000108
0x0400010C
R:oooooooo_oooooooo
W:oooooooo_oooooooo

CCCCCCCC_CCCCCCCC タイマーカウントレジスタ
Cタイマー初期値(W)、現在値(R)
オーバーフローすると初期値から再スタートする
・読み込みで現在のカウント値を取得できる
PCM再生周波数の設定値は通常、下記でめる。
 16,780,000 ÷ 周波数(Hz) × -1 = C
TIMER0から
0x04000102
0x04000106
0x0400010A
0x0400010E
R:xxxxxxxx_ooxxxooo
W:xxxxxxxx_ooxxxooo

XXXXXXXX_EIXXXUSS タイマーコントロールレジスタ
S:プリスケーラ選択
・0:F/1、1:F/64、2:F/256、3:F/1024 ( F = 16,780,000 Hz )

Uオーバーフローカウントアップ
・有効にするとプリスケーラの設定を無視し、
 1つ前のタイマーのオーバーフローでカウント

X:未使用
I:割り込み許可
・有効にするとオーバーフローで割り込み (1:ON 0:OFF)

Eタイマースイッチ
・0:停止 1:作動

 

CH1・CH2:矩形波

このチャンネルで出せる矩形波のDutyは、12.5% 25% 50% 75%の4種類。波形は以下の表を参照。

Duty 波形
12.5% _| ̄|_______| ̄|_______| ̄|_______
25% _| ̄ ̄|______| ̄ ̄|______| ̄ ̄|______
50% _| ̄ ̄ ̄ ̄|____| ̄ ̄ ̄ ̄|____| ̄ ̄ ̄ ̄|____
75% _| ̄ ̄ ̄ ̄ ̄ ̄|__| ̄ ̄ ̄ ̄ ̄ ̄|__| ̄ ̄ ̄ ̄ ̄ ̄|__

CH1の矩形波チャンネルにはスイープ機があり、周波数を変化させることが出来る。

スイープレジスタ0x04000060)での定することにより、周波数を上昇させたり下降させたりする事が出来る。
周波数更新時、以下の計算方法で周波数の上昇・下降を行う。

周波数上昇:
   周波数レジスタ値 = 周波数レジスタ値 + ( 周波数レジスタ値 >> 周波数変更量 )

周波数下降:
   周波数レジスタ値 = 周波数レジスタ値 - ( 周波数レジスタ値 >> 周波数変更量 )

FC音源仕様と同じように見えるが、べると実は全然違う。 GBA音源の場合、周波数レジスタ値はFC音源のときとは逆で、値が多いほど周波数が高くなるため、レジスタ値が大きいほど周波数の変化が大きくなり、レジスタ値が小さいほど周波数の変化が小きくなる。

FC音源では、キーオン仕様上、周波数レジスタ9bit以降の書き換えでプチノイズが出るが、GBA音源ではキーオン仕様が違うため、周波数レジスタ9bit以降を変更してもプチノイズは乗らない。GB音源FC音源べて、ソフトウェアによる周波数変更に強いといえる。


矩形波は、キーオン時に波形位置がリセットされないが、波形は若干乱れる。

CH3:波形メモリ

ゲームボーイの特徴とも言える波形メモリ。アドバンスでは1バンクあたり32サンプルのバンクを2つ利用出来る。

波形メモリの周波数は、矩形波とべて1オクターブ低い。


波形データは読み書きしたいバンクとは別のバンクを0x04000070で定し、0x04000090-0x0400009Fへ書き込む。 バンクあたりのサンプル数は32、量子化ビット数は4、上位4bit→下位4bit→次の上位4bit…の順で出される。


音量は、5段階で変更できる。(1, 3/4, 1/2, 1/4, OFF) ただし、波形データをビットシフトする形で音量を下げているため、失われた下位ビットの分波形が変わる。

CH4:ノイズ

ノイズ音の周波数は、線形帰還シフトレジスタによる擬似乱数で出ている。

C言語ソース的には、以下のような記述で波形がめられる。

//レジスタの初期値
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音源べて、短周期ノイズドラム音として使いやすくなっている。

CHA・CHB:8ビットPCM

ゲームボーイアドバンスで追加されたチャンネル。このチャンネルは他のチャンネルと違い、サンプリングされた波形などを直接再生することができる。これにより、ソフトウェアで最大同時発音数を増やすことが出来るようになった。


販のGBAゲームソフトのほとんどがソフトウェアPCM合成も行っていると思われるが、ゲームによっても音質は異なる場合があるようだ。これは、波形で使用するメモリーPCM合成にかかる時間に余裕がないためなのだろう。


発音動作は再生周波数設定用タイマーとPCM転送用のDMAを介して行われ、その間CPUサウンドの合成や別の処理をすることができる。


仕組みとしては、DMAを有効にすると即座にFIFOへ転送され、タイマーのオーバーフローで1サンプルがFIFOから再生される。再生位置は後続のタイマーをカスケード接続し、オーバーフローによるカウントを有効にすることで再生されたサンプル数をカウントできる。

なお、ここではPCM合成についての解説はしない。

エンベロープ

GBA音源の矩形波・ノイズチャンネルでは、音量をハードウェアで変化させることが出来る。

GBA音源ハードウェアエンベロープは、FC音源べると強化されている。 初期リュームが定でき、その音量から増幅・減衰させることができる。
FC音源では、初期リュームは最大固定で、変化は減衰のみ)


矩形波・ノイズチャンネルでは、音量レジスタ0x04000062 0x04000068 0x04000078)を変更した後、反映のためにキーオンしなければならない。

しかし、キーオンすると、矩形波チャンネルでは波形が若干乱れ、ノイズチャンネルではレジスタリセットされてしまうため、GBA音源FC音源べて、ソフトウェアエンベロープに弱い。そのため、矩形波・ノイズチャンネルソフトウェアエンベロープを使用するソフトは、ファミコンべると少ない。

ソフトウェアエンベロープを使用するソフトの多くは、音量を変化する頻度を少なくしたり、一部のエンベロープをハードウェアに任せるなど、ノイズ立たせないように工夫されていた。

キーオンせずに音量レジスタだけ変更すると、訳の分からない変な挙動によって、期待通りの音量にならない。

波形メモリチャンネルは、音量レジスタの変更のみでも大丈夫なのでノイズは発生しない。

関連動画

GBA音源に関するニコニコ動画の動画を紹介してください。

関連項目

携帯版URL:
http://dic.nicomoba.jp/k/a/gba%E9%9F%B3%E6%BA%90
ページ番号: 4329555 リビジョン番号: 747846
読み:ジービーエーオンゲン
初版作成日: 10/04/06 21:53 ◆ 最終更新日: 10/05/10 01:56
編集内容についての説明/コメント: 主にタイマーとDMAのレジスタの追加、PCMの説明の修正など
記事編集 / 編集履歴を閲覧 /

GBA音源について語るスレ

16 : ななしのよっしん :2011/09/18(日) 16:05:46 ID: aKGQxukgwF
GBA音源いじれるソフトは何があるの?
17 : 犬と雑草 :2011/10/16(日) 19:23:49 ID: kEgRaoKITm
>>14
金管楽器もかなり良いと思う。改造したことはないけど。
作曲者&編曲者が音を活かしてるから良く聴こえるのかな。

>>15
なんかクリアになってスピード感のあるBGMに合うようになったよね。(ポケモンDS
18 : ななしのよっしん :2011/11/01(火) 20:40:04 ID: 9joJfUx0xT
ところでポケモンDSってどれの事言ってるの?
19 : 17 :2011/11/02(水) 00:28:45 ID: kEgRaoKITm
が書いてるのはDPPtとHGSS
BWも近いことは近いけど、前者らより少し重い音が出る印。(GBAよりは軽い)

RSEFRLGは芯が太くて重く強い音が出るから、伝説戦みたいな重い曲に凄く合う。
それとべるとDPPtとHGSSは軽めだから、重い曲より疾走感のある曲が合うって。

好みの問題になるけど、GBAの方が好きだったな。
DSは確かにリアルさは増したけど、音としての強さが少し頼りなくなった気がする。
20 : ななしのよっしん :2012/01/05(木) 09:38:22 ID: TxBhKInmrM
音ととか素人だから細かいことは全く分からないんだけど
やっぱりSFCより劣る気がする
SFC移植とかも結構あったけどね
21 : ななしのよっしん :2012/01/05(木) 09:52:11 ID: mj7nij08ed
MSGSストリングスとスティールドラムだけは一人前だから
GBAがどうとかSFCがどうとかよりその楽器が入ってるかどうかで評価変わるよね
22 : ななしのよっしん :2012/01/05(木) 10:11:53 ID: 6QaRaK3U9N
bit GenerationsのSkipもなかなか
ゲームに割くリソースが少ないからかもしれんが
23 : ななしのよっしん :2012/01/12(木) 15:15:26 ID: aat6W5cMxQ
アドバンス版スパロボBGMGジェネアドバンスとかにべたら普通GBっぽいけど、あれはPCMの容量を効果音に回してるからでOK?
24 : ななしのよっしん :2012/02/12(日) 19:04:58 ID: VxzKbZuzDv
>>18
BWHGSSあたりが良いんじゃないかな、ポケダンDPtもそこそこ
HGSS
>>sm11196649

ポケダン
>>sm6831242

BW
>>sm14133298

DPt音
sm16345314
25 : ななしのよっしん :2012/03/19(月) 15:45:51 ID: +A993JafyW
ワリオアドバンスはかなり音良いと思う
ページトップへ戻る