GAME BOY / 02
発音後の音量を、時間で変える
短く消える音、ゆっくり大きくなる音。Envelopeは、発音した後の音量をAPU自身が段階的に変える仕組みです。
値を変えて、聴き比べる
まず初期音量12・down・周期2で再生します。周期を7にすると、同じ一段の変化までの時間が長くなります。次に初期音量3・up・周期2で、音が大きくなる向きを比べましょう。
再生ボタンを押すまで音は鳴りません。
DMGのデジタル音源を既存WASMコアで生成します。実機のアンプ・スピーカー・アナログフィルターは再現しません。試聴だけに固定ゲインと両端10 msのフェードを加えます。図は加工前のPCMです。設定を変えると試聴が止まるので、もう一度再生してください。
同じ設定を、コードで持ち帰る
値を変えるとコードとリンクが更新されます。PlaygroundでRunして試し、Stopで停止できます。
チップでは、何が起きる?
Pulse 1(CH1)をA4・デューティ50%に固定し、NR12の初期音量・方向・周期だけを変えています。音量は0〜15の16段階で、周期1〜7のとき、概ねperiod / 64秒ごとに1段変わります。0または15の端に達するとそれ以上は変わりません。周期0はこの自動変化を止めます。
初期音量0・upでは、無音から大きくする設定も試せます。0・downではDACが停止して発音しません。音量変化で0に達することと、DACを停止するkeyOff()は別の動作です。
setVoice()の設定後にkeyOn()を呼び、毎回初期音量から始めます。発音中のNR12書き換えには機種・コアによる副作用があるため、このページでは設定変更時に止めてから発音し直します。
sleep(2)は試聴を2秒で止めるJavaScriptの処理です。図の途中で起こる音量の変化は、JavaScriptで音量を繰り返し書き換えず、APU自身が進めています。固定ゲイン以外の音量の自動調整は行いません。