エンベロープ

以前UGenの説明なんかやってられっか、と書きましたが
音作りの基本的に押さえといたらいいんではないか、というのはいくつかある。
例えばEnvGenはエンベロープを生じせしめるものですが、エンベロープが何かというと、音量の変化と言うか、音の輪郭と言うか。
現実の音には必ず始めと終わりがありますが(エネルギーは散逸する)
データとしての音にそんなものはないので、必要なら始めと終わりを与えてやらねばならない。

SynthDef("hoge", {
var
o = SinOsc.ar(500);
Out.ar(0, Pan2.ar(o, 0));
}).play;

これはただの「ぽー」です。

SynthDef("hoge", {
var
e = EnvGen.ar(Env.perc(0, 1)); // エンベロープ
o = SinOsc.ar(500, 0, e);
Out.ar(0, Pan2.ar(o, 0));
}).play;

最大から始まり1秒で消え去るエンベロープを入れました。
これだけでも、ただの「ぽー」ではなく楽器っぽい感じになる。
EnvGenとかEnvの詳細はヘルプを参照(丸投げ)。

SynthDef("hoge", {
var
t = Impulse.ar(1); // 1Hzのインパルス
e = EnvGen.ar(Env.perc(0, 1), t);
o = SinOsc.ar(500, 0, e);
Out.ar(0, Pan2.ar(o, 0));
}).play;

Impulseでもってトリガさせたりも可能。
エンベロープと言っても、要は音と同じ波形なので、用法は何も音量に限らない。

SynthDef("hoge", {
var
t = Impulse.ar(1);
e = EnvGen.ar(Env.perc(0, 1), t);
o = SinOsc.ar(500*e, 0, e); // 周波数にエンベロープ
Out.ar(0, Pan2.ar(o, 0));
}).play;

周波数にエンベロープを掛けたら「どぅーん」という下がる音になった。

SynthDef("hoge", {
var
t = Impulse.ar(1);
e = EnvGen.ar(Env.perc(0, 1), t);
o = SinOsc.ar(e**2*500, 0, e); // 周波数にエンベロープの2乗
Out.ar(0, Pan2.ar(o, 0));
}).play;

何乗というのは「**」と書く。エンベロープの2乗って何だ。
二次関数のグラフ、いわゆる放物線というやつですが、こうすると周波数がぎゅいんと下がってセクシーな感じになる。と思います。数字を増やせばどんどんくびれる。