Mixの用法

{ SinOsc.ar([400, 500]) }.play;

こう書くと左右別々に鳴らせる。ほほー

{ SinOsc.ar([400, 500, 600]) }.play;

三つ同時は無理だったもよう。右の次というのはないもんな

{ Mix(SinOsc.ar([400, 500, 600])) }.play;

Mixで三つ同時に鳴らせる。ただしこれだと音量も三倍で割れてる。
つまりこの書き方で、実際にはSinOscが三つ立ち上がってるということか。
あと、またしても左だけになってる。

{
a = Mix(SinOsc.ar([400, 500, 600]));
b = Pan2.ar(a, 0, 1/3);
}.play;

真ん中に持ってきて音量を1/3にした。
こうしてきれいな三和音ができました。めでたし。
別に三つに限らず何個でもMixできる。ついでに配列の部分を外に出して

{
a = [100, 200, 300, 400, 500, 600, 700];
b = Mix(SinOsc.ar(a));
c = Pan2.ar(b, 0, 1/a.size);
}.play;

sizeというのは配列の長さの意味。この場合a.sizeとは7だから、音量は1/7になってる。
配列の長さによらず常に音量の合計を1にする作戦です。

{
a = 8;
b = Mix.fill (a, {
		c = 1000.rand;
		d = SinOsc.ar(c, 0, 1/a);
});
e = Pan2.ar(b, 0);
}.play;

やや。これまた見慣れぬ感じになりましたが、今度はMix.fill。
{ }の間の処理を繰り返すものでして、aで繰り返しの回数を指定。
randについては後述。

{
a = 8;
b = Mix.fill (a, {
		arg n;
		c = 100*n;
		d = SinOsc.ar(c, 0, 1/a);
});
e = Pan2.ar(b, 0);
}.play;

今度はMix.fillの中にargというのが入っている。
するとどういうわけか、繰り返す度にこれの値が1ずつ増える。
出音としては二つ前のと同じと思われます(最初に0HzのSinOscが混ざっちゃってるが)

{
a = 8;
b = Mix.fill (a, {
		arg n;
		c = (5*n+50).midicps;
		d = SinOsc.ar(c, 0, 1/a);
});
e = Pan2.ar(b, 0);
}.play;  

さっきよりは和音っぽい感じですが、今度はmidicpsというのを使ってる。midicpsについても後述。