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、本当に楽しい...。