まず一本、線で見る
いちばん単純な音は正弦波。横軸を時間、縦軸を振幅にして、各 x で Math.sin の値を縦に取ると、y = sin(2π f t) の一本の波が画面の幅いっぱいに伸びる。phase を毎フレーム少しずつ足すと、波形が横に流れる。freq を上げると山の数が増える。
正弦波 sin(2π f t)。単一の周波数 f だけを含む最も基本的な信号。f が音の高さ(ピッチ)、振幅が音量を決める。マイクやスピーカーが扱うのも、この -1〜1 の値の時間変化。横を時間、縦を振幅に取って折れ線で見せる装置がオシロスコープで、WebAudio の OscillatorNode が type: "sine" で生む波も同じ形。
横が時間、縦が振幅、中央の薄い線が振幅 0(無音)。for ループが x を 0 から w まで走査して、(x / w) * freq * Math.PI * 2 で横位置を freq 周期ぶんの角度に写し、phase を足してから Math.sin に通す。返った -1〜1 を amp 倍して mid から上下に振る。freq を 1 にすると山がひとつ、上げると山が詰まる。phase += 0.03 を止めると波形も止まる。