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()関数を使って振幅の値を平滑化し、円の大きさを決定しています。
最後に、円を画面の中央に描画しています。