見出し画像

Processing #1 visualizer circle color

result

code

import ddf.minim.*;
import ddf.minim.analysis.*;

Minim minim;
AudioPlayer player;
AudioInput in;
FFT fft;


// 周波数帯域を限定する変数
int minBand = 10;
int maxBand = 80;

// 色調を確定する変数
float R = 150;
float G = 150;
float B = 150;
float bgColor = 0;

// 初期化関数
void setup() {
  //minim初期化
  minim = new Minim(this);
  in = minim.getLineIn();
  fft = new FFT(in.bufferSize(),in.sampleRate());

  size(600, 600);
  strokeWeight(1);
  background(255);  
  blendMode(ADD);
}

// 毎フレーム呼ばれる関数
void draw() {
  background(bgColor);
  setColor();
  //-------------------------
  //左ラインインから音声を取得
  fft.forward(in.left);
  //-------------------------
  circle();
}

//円を描画する関数
void circle() {
  for (int j = minBand; j < maxBand; j++) { 
    //------------------------- 
    //ある帯域の音量を取得
    float volume = fft.getBand(j);
    //-------------------------
    println(R);
    if (volume > 0.3 && volume < 4) {
      float w = map(j, minBand, maxBand, 0, width);
        float h = map(volume, 0, 5, 0, height/2);
        fill(R, G, B, 100); stroke(R, G, B);
        ellipse(w, height/2, h, h);
    }
  }
}

//色を変化させる関数
void setColor() {
  // ランダムに設定
  R = R + 1;
  G = G + 2;
  B = B + 3;
  if (R > 255) {
    R = R - 255;
  }
  if (G > 255) {
    G = G - 255;
  }
  if (B > 255) {
    B = B - 255;
  }
}

memo

  • 背景

    • 随分前運営してた技術解説ブログで作ってたものの焼き直し

  • 技術

    • fft.forward(in.left);は、PCへの左ラインインの音を取得。mp3とか使いたかったら、この辺いじる。

    • fft.getBand()は、FFTによって帯域幅毎に分割された音声の、ある個所の音量を取得する関数。

    • fft = new FFT(in.bufferSize(),in.sampleRate());

      • 初期設定ではbufferSize()は1024、sampleRateは44100Hz。
        これは44100Hzの音声を1024のバッファで分割する、ということ。
        FFTによって分割された各帯域幅は44100/1024≒43.06Hz

      • fft.getBand(10)とは、『分割された帯域幅の10番目の帯域の音量』を示す。
        fft.getBand(10)≒43.06Hz x 10 ≒430Hz
        fft.getBand(80)≒43.06Hz x 80 ≒3KHz

      • ベース音は別にいいかって感じにして、中音域から高音域までを取得するようにしたのが、今回のプログラム

    • 動画は画像を出力し、Aviutlで読み込んで作った(うろ覚え)

この記事が気に入ったらサポートをしてみませんか?