メーリングリストから
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とか入れときましょう、ゼロはだめみたいです。