GAME BOY / 01
パルスの幅を変えると、
音はどう変わる?
同じ「ラ」の音でも、波の幅を変えると響きが変わります。まず50%で聴き、12.5%と比べてみましょう。
1. 一つの値を変えて、聴く
デューティ比は、繰り返すパルスの幅の割合です。音程をA4、音量を10に固定して、幅だけを変えてください。25%と75%は波形の向き・位相が違いますが、単独ではほぼ同じ音色になります。
再生ボタンを押すまで音は鳴りません。
この試作はDMGのデジタル音源をエミュレートします。実機のアンプ・スピーカーの音色やアナログの高域通過フィルターは再現していません。試聴時のみ一定の音量調整と始端・終端10 msのフェードを加えています。図は加工前のPCMです。
2. 同じ設定を、コードで持ち帰る
上の値を変えると、このコードも変わります。PlaygroundでRunすると同じ音色設定を再現できます。Stopで停止してください。
initialize()は4チャンネルを無音で準備します。keyOn()から発音し、keyOff()で停止します。ここではエンベロープの周期を0にして音量を一定にし、CH1のスウィープも初期値で無効にしています。sleep(1.5)はJavaScript側の時間制御です。
| 操作 | 対応する設定 |
|---|---|
pulse.setVoice(ch, {duty}) | CH1のNR11 / CH2のNR21、上位2 bit |
volume, envelope | NR12 / NR22(初期音量・方向・周期) |
pulse.setNote(ch, 'A4') | NR13・NR14 / NR23・NR24の周波数値。実際の周波数はレジスター精度へ丸められます。 |
keyOn(ch) | NR14 / NR24のtrigger。高レベルAPIでは長さカウンターを無効にします。 |
3. 実機では、どこで音が生まれる?
ここで説明する実機は初代Game Boy(DMG)、基板資料の対象はDMG-CPU-06です。APUはCPUと同じICの中にあります。独立したYM2612を載せるメガドライブとは構成が違います。
同じIC内のAPUへ
Wave・Noise
Pulse 1だけがハードウェアの音程スウィープを持ち、Pulse 2にも同じ4種類のデューティ比があります。Waveは32点の波形メモリー、Noiseは疑似乱数列を使う別の発音回路です。
実際の部品位置は、Gekkio氏のDMG-CPU-06基板トレースと回路図で確認できます。これらの資料はCC BY 4.0です。本ページへの画像転載は行っていません。DMGの別リビジョンやGame Boy Colorへ部品配置を一般化しないでください。