今私は小さな魚だけれど

ちょっぴり非日常な音楽を紹介するブログです

【GB】ノイズチャネルを高速でオンオフして音色を作る

ゲーム機実機を使ったチップチューンはけっこう制約が強く、特に同時発音数に困って「使える音のチャネルがもう一つ増えればいいのに…」と思っている方も多いと思います。

そこで、今回は『高速でオンオフすれば、人間には「断続的な音」ではなく「単一の音」に聞こえ、同時に発音できる楽音がもう一つ増えるのではないか』ということを検証してみます。特に、低音のベースの音として使えれば、三角波として使っているWAVチャネルが空いて楽曲制作の幅が広がりそうです。

ゲームボーイ開発ツールのGBDKにおけるノイズチャネルを使ったプログラミングを解説している動画のコードを改造します。

www.youtube.com

Example of noise sound in GBDK · GitHub

上のgistにあるソースコードの、以下のC言語ソースコードの極めて短い時間にするという実験をしてみます。

#include <gb/gb.h>
#include <stdio.h>

void main(){
    int i = 1; // 待ち時間
    int d = 2000; // 2秒以上経ったら切り替え
    int c = 0; // ループ数のカウンター
    NR52_REG = 0x80;
    NR50_REG = 0x77;
    NR51_REG = 0xFF;

    while(1) {
        UBYTE joypad_state = joypad();
        
        if(joypad_state) {
            NR41_REG = 0x1F;
            NR42_REG = 0xF1;
            NR43_REG = 0x30;
            NR44_REG = 0xC0;  

            if (c * i > d) {
                i *= 2; // 待ち時間を2倍ずつ伸ばす
                c = 0;
            } else {
                c++;
            }
            delay(i);
        }
    }
}

ここを様々な値に変えたものを、GB USB SMART CARDを使って実機で発音させてみます。

実際に初代ゲームボーイの実機で音を鳴らした結果がこちらです。エミュレータでもほぼ変わらずに動作しました。

目論見通り、調整が難しそうなものの、音の高さがはっきり分かる楽音として機能しそうな音色を得ることはできました。

ただ、ベースの音として使うには向いていない音のように感じています。これは波形がduty比: 12.5のpulse waveに近いもので、非整数を含めた倍音が多く含まれているせいなんじゃないかと推測しています。これはノイズの長さで多少はなんとかなるかもしれません。

また、同じことをpulseチャネルで行えば、本来のゲームボーイの仕様より低い音が出せるんじゃないかという気もしています。こちらも今度実験してみます。