ゲーム機実機を使ったチップチューンはけっこう制約が強く、特に同時発音数に困って「使える音のチャネルがもう一つ増えればいいのに…」と思っている方も多いと思います。
そこで、今回は『高速でオンオフすれば、人間には「断続的な音」ではなく「単一の音」に聞こえ、同時に発音できる楽音がもう一つ増えるのではないか』ということを検証してみます。特に、低音のベースの音として使えれば、三角波として使っているWAVチャネルが空いて楽曲制作の幅が広がりそうです。
ゲームボーイ開発ツールのGBDKにおけるノイズチャネルを使ったプログラミングを解説している動画のコードを改造します。
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を使って実機で発音させてみます。
GB USB SMART CARD 64M for GB / GBC / GBA / ゲームボーイ ・ ゲームボーイアドバンス 専用 バックアップ ツール
- 出版社/メーカー: EMS
- メディア: Video Game
- 購入: 1人 クリック: 2回
- この商品を含むブログを見る
実際に初代ゲームボーイの実機で音を鳴らした結果がこちらです。エミュレータでもほぼ変わらずに動作しました。
目論見通り、調整が難しそうなものの、音の高さがはっきり分かる楽音として機能しそうな音色を得ることはできました。
ノイズのオンオフで音色作れないか実験 pic.twitter.com/Uv4JyZDkLx
— 黒めだか (@takeshi0406) February 17, 2019
ただ、ベースの音として使うには向いていない音のように感じています。これは波形がduty比: 12.5のpulse waveに近いもので、非整数を含めた倍音が多く含まれているせいなんじゃないかと推測しています。これはノイズの長さで多少はなんとかなるかもしれません。
また、同じことをpulseチャネルで行えば、本来のゲームボーイの仕様より低い音が出せるんじゃないかという気もしています。こちらも今度実験してみます。