import ddf.minim.*; import ddf.minim.signals.*; Minim minim; AudioOutput out; SineWave[] sine; float waveH = 50; int n=30; void setup() { size(512, 200); smooth(); minim = new Minim(this); sine=new SineWave[n]; out = minim.getLineOut(Minim.STEREO); int i; for(i=0;i < n;i++){ int m=i+1; sine[i] = new SineWave(440*m, 2*(1-cos(m*PI))/(m*PI*440)*100, out.sampleRate()); } for(i=0;i < n;i++){ out.addSignal(sine[i]); } } void draw() { background(255); stroke(0); for(int i = 0; i < out.bufferSize()-1; i++) { point(i, 50 + out.left.get(i)*waveH); point(i, 150 + out.right.get(i)*waveH); } } void mouseMoved() { int t = int(map(mouseX, 0, width, 1, n)); for(int i=0;i < t;i++){ int m=i+1; sine[i].setAmp(2*(1-cos(m*PI))/(m*PI*440.)*100); } for(int i=t;i < n;i++){ sine[i].setAmp(0); } } void stop() { out.close(); minim.stop(); super.stop(); }
2017年4月5日水曜日
Processingで矩形波のフーリエ変換の可視・音声化デモ
こちらを参考にさせていただきました。学生さんの卒論に向けたProcessingでのフーリエ合成(というかMinimの使い方)練習。Processing、本当に楽しい...。