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