【Processing】画像のピクセル情報を利用したソニフィケーション
ピクセル情報を取得してソニフィケーション。
一定の距離を進むとy方向に進みつつ距離とループ回数を再設定する。
すでに誰かがやってそうだけど、ここからいろいろ発展できそう。
import processing.sound.*; SawOsc sine1, sine2, sine3; float amp1 = 1; float amp2 = 1; float amp3 = 1; float hertz1 = 0; float hertz2 = 0; float hertz3 = 0; PImage img; //画像のオブジェクトdogを宣言 float moza; //モザイクの大きさための変数 int x = 0; int xst = 0; int xend = 0; int y = 0; int sq = 0; int sqend = 4; void setup() { sine1 = new SawOsc(this); sine2 = new SawOsc(this); sine3 = new SawOsc(this); sine1.play(); sine2.play(); sine3.play(); xend = xst + 200; img = loadImage("fns.jpg"); //画像をロードする size(1200, 600); //画面サイズ background(0); frameRate(60); } void draw() { sonic(); //音響処理 image(img, 0, 0); color aaa = img.get(x, y); color xy = color(255) - aaa; hertz1 = map(red(xy), 0, 255, 0, 10000); //周波数 hertz2 = map(green(xy), 0, 255, 0, 10000); //周波数 hertz3 = map(blue(xy), 0, 255, 0, 10000); //周波数 if (x < xend) { x+=10; } else { sq++; println(sq,sqend); x = xst; } if (sq >= sqend ) { sq=0; sqend = int(random(4))*2; y = y + int(random(-10,30)); if(y < 0 || y > height){y = 0 ;} xst = (int)random(width - 200); x = xst; xend = xst + 25*(int)random(1,6); } noFill() ; strokeWeight(3); stroke(aaa); ellipse(x, y, 10, 10); line(x, 0, x, height); line(0, y, width, y); } void sonic() { sine1.freq(hertz1); sine1.amp(amp1); sine2.freq(hertz2); sine2.amp(amp2); sine3.freq(hertz3); sine3.amp(amp3); }