メーリングリストから

ChucKのメーリングリストから少し拾ってみる。
以下のようにオシレータを3個繋げると振幅が合計され-3から3になります。

sinosc s => gain g => dac;
sinosc s2 => g;
sinosc s3 => g;

ですから振幅を1にするにはs.gainに0.3333。またg.gainを1にしてもいいのかな?。
gainはシグナルを標準で加算することはわかった。そのうえ.opを使うことで掛け算や割り算などにできる。

1 => g.op;  //足し算(標準)
2 => g.op;  //引き算
3 => g.op;  //掛け算
4 => g.op;  //割り算

次ぎはlast()とvalue()です。以下のような場合がわかりやすい。lastはUGenの出力をスナップするのでエンベロープに入る前の値になる。ですからvalueエンベロープの値をプリントする。

sinosc s => Envelope e => dac;
while(true)
{
   <<<e.value(),e.last()>>>;
   1::second => now;
}

「ADSRエンベロープのアタックなどの標準(デフォルト)はいくら?」って質問があったが回答は無かった。いい質問なのにネ。ただ.attackTimeに0.0を代入してもうまくいきません。0.01とか入れときましょう、ゼロはだめみたいです。