ベネズエラの有名なゲーム CRAZYBUS の BGM を流す Web アプリを作った。Web Audio API を使っている。
ソースコードは GitHub にある。
十二平均律では、半音の周波数比がすべて同じであり、1 オクターブで周波数が 2 倍になることから、半音の周波数比は
\begin{eqnarray} r = 2^{\frac{1}{12}} \end{eqnarray}
となる。音程の基準を \( 440 \ \mathrm{Hz} \) として、上下 2 オクターブずつ周波数を算出する。
OscillatorNode
で矩形波を生成するconst context = new AudioContext()
const oscillator = context.createOscillator()
oscillator.type = 'square'
oscillator.frequency.value = 440
のようにして矩形波を作成できる。
CRAZYBUS の BGM は、音程をランダムに 2 つ選び、BPM 360 で音程を変えながら混ぜればよい。
バスの走行音は A2、クラクションの音は G5 らしい。