地図/気まぐれ/音と絵

ここから先は未踏

DFT の次の一段が、実際に鳴っている音を解析してその場で絵を駆動する audio-reactive。マイクや音源を AudioContext に繋いで、AnalyserNode で毎フレーム getByteFrequencyData を読み、その配列で図形のサイズや明るさを動かす。スペクトルが放射状のメーターになったり、低音でシェイクしたり、という反応。

実際に鳴らす配線は先に置いて、getByteFrequencyData が返すのと同じ「周波数ビンの配列が毎フレーム更新される」形だけを先取りする。横を時間、縦を周波数ビン、明るさを各ビンの強さにして、毎フレーム一列ずつ左へ送ると、音が時間軸に流れるスペクトログラムになる。下はスペクトルを乱数でなく、ゆっくり動く三つの山(低・中・高の帯)で合成して、その配列を一列ずつ書き足している。

AnalyserNode.getByteFrequencyData は FFT の結果を 0..255 の整数配列で返す。各要素が一つの周波数ビンの瞬間的な強さで、fftSize の半分の本数だけ並ぶ。このビン配列を縦に積んで時間ごとに横へ送ると、横軸が時間・縦軸が周波数・濃淡がパワーのスペクトログラムになる。声紋やソナーの表示と同じ図で、定常的な倍音は横に伸びる線、打撃音は縦の筋として現れる。鳴らす配線が付くと、この合成スペクトルが実音のビン配列に差し替わるだけで絵の作りは変わらない。

band がひとつの帯で、中心ビンからの距離をガウスで落として山にしている。三つの帯を足した一列を毎フレーム書いて、head を一つ進めるリングバッファで時間方向に送る。低い帯ほど太く明るく、高い帯ほど細く揺れが速い。山の中心 centersin でゆっくり動かすと、横に伸びる明るい筋が上下にうねる。getByteFrequencyData の戻り値をそのまま spectro の一列に入れ替えれば、合成スペクトルが実音のスペクトログラムになり、低音でシェイク・スペクトルで放射メーターといった反応へ繋がる。