Processingによる音響のビジュアライゼーション
Processingで音声を扱う方法
processingには音声を扱うsoundというライブラリがあります。
これを使って、processingに音声を数値として入力できます。
次のコードは、PCの録音デバイスから音声を入力し、その振幅を取得する例です。
使っているオーディオインターフェイスにフィードバックの機能があれば、PCの出力を入力に戻すことができます。
そうすることで、SuperColliderで生成した音声をProcessingでビジュアライズできます。
import processing.sound.*;
AudioIn in;
Amplitude amp;
float raw;
float smoothed = 0;
int i;
void setup() {
fullScreen(P3D);
noStroke();
in = new AudioIn(this, 1);
amp = new Amplitude(this);
in.start();
amp.input(in);
}
void draw() {
background(220);
raw = amp.analyze();
smoothed = lerp(smoothed, raw, 0.1);
i = int(smoothed * 10000 + 100);
push();
fill(120, 80, 220, 20);
translate(width / 2, height / 2);
circle(0, 0, i);
pop();
}
このコードでは音量に応じて大きさが変わる円を出力します。
音声の振幅を取得するために、AudioInクラスとAmplitudeクラスを使用しています。
AudioInクラスはPCの録音デバイスから音声を取得し、Amplitudeクラスはその音声の振幅を計算します。
draw()関数内でamp.analyze()を呼び出すことで、現在の振幅を取得しています。
取得した振幅は0から1の範囲の値で表されます。
その後、lerp()関数を使って振幅の値を平滑化し、円の大きさを決定しています。
最後に、円を画面の中央に描画しています。