金曜日, 3月 09, 2007

ess envelope

essのenvelopeがよくわからない。maxとかsc3みたいに何秒で振幅がどんだけで〜みたいな指定の仕方のはず。EPoint(時間,振幅)で、時間はfloat。サンプルから推測するに1が1秒なんだろう。と、思いきや、どうやらframe数が変わっても形を保つらしい。maxでいうとbreakpoint function editorにsetdomain $1でframe数変えてるのと同じ。つまりサンプル数によって1秒で振幅が1になったり0.25秒で1になったりするということ。ややこしい。何が何でも0.1秒後に振幅1になってそれから0.2秒後に0になって欲しい。って指定がしたい時はどうすれば...。

あと、サンプルファイルはsetup()メソッドの中に一度だけ書いておくのではなく、毎回鳴らす度にnewしてあげる方がいい。特にone shotもの。ちょっと腑に落ちないけど。

import krister.Ess.*;

AudioChannel myChannel;
Envelope myEnvelope;

void setup() {
size(256,200);

// start up Ess
Ess.start(this);

}

void playSound(){

// load file into a new AudioChannel
myChannel=new AudioChannel("cell.aif");

// apply a 4 point envelope
EPoint[] env1 = new EPoint[4];
env1[0] = new EPoint(0,0);
env1[1] = new EPoint(1,1);
env1[2] = new EPoint(2,0);
env1[3] = new EPoint(3,0);

myEnvelope = new Envelope(env1);

myEnvelope.filter(myChannel);

// play
myChannel.play();
}

void draw() {
}

void mousePressed() {
playSound();
}

// we are done, clean up Ess

public void stop() {
Ess.stop();
super.stop();
}

0 件のコメント: