補足
上で書いた「うなり」のコードの一部とからめてChucKの文法についてメモ。
while(2::second => now) s2.freq() + 1 => s2.freq;
まず公式サイトのリファレンスには一体何なのかが明記されていないdur型の「::」という表記。electro-musicという掲示板サイトのChucKフォーラムにそのままな質問があったので、その回答から引用。
Those two double dots are just a syntactic convention.
http://electro-music.com/forum/post-103890.html#103890
というわけでただの慣習。これ以上気にしてはいけない。この回答者によれば「::」の代わりに乗算記号「*」でもいいらしいので、どうしても拒絶反応があるなら「2 * second => now」とも書ける。
次。while文の書き方。今までの書き方に従うなら下のコード。
while(true) { s2.freq() + 1 => s2.freq; 2::second => now; }
ここで「2::second => now」はnowの値を返す。そして条件式は0以外の値なら全部真なのでnowへの代入を条件式にしても同じ処理になる。無限ループ。
最後にユニットジェネレータのパラメータの読み書きについて。読み書きはそのパラメータ名の関数を通してやる。だからセットするときは「s2.freq(f)」でもいいしChucK演算子を使って「f => s2.freq」でもいいけど、値を取得するときは「s2.freq()」と書く必要がある。以下のコードのどの行も「s2.freq() + 1 => s2.freq;」の代わりにはならない。エラーになる。
s2.freq + 1 => s2.freq; 1 +=> s2.freq; ++(s2.freq);