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();
}