記事検索

2006年01月12日

Busの使い方 [4. SuperCollider]

SuperColliderにはBusと言うものがあります。Busとはオーディオミキサーで言えばチャンネルのようなものです。

SuperColliderでは0から127までの128チャンネルのオーディオバスが用意されていますが、使用している環境のアウトプットがステレオ2チャンネルの場合、実際に音が鳴るのはバス0とバス1だけで、バス2以降に音を送ってもスピーカーからは出力されません。この「スピーカーから音が出ない」ことを利用して、音が出ないバスに原音を送り、エフェクトはそのバスから音を受け取って、ウェット音を音が出るバスに送る、と言った使い方が出来ます。

SuperColliderの面白いところは、音を扱うオーディオバスに加えて、コントロール信号を扱うコントロールバスが用意されていることです。0から4095までの4096チャンネル用意されています。コントロールバスはオーディオバスよりメモリ消費量が軽い(WAVEデータよりMIDIデータの方が軽いのとまぁ似た様な理屈です)だけで、オーディオバスと同じように扱うことが出来ます。

では、実際の使い方。バスに音を出力するにはOutを使います。
(
SynthDef("test", {
	Out.ar(0, SinOsc.ar(440, 0, 1) );
}).load(s);
)
このシンセ定義の場合、バス0にサインウェーブをモノラル出力しています。
(
SynthDef("test", {
	var x;
	x=SinOsc.ar(440, 0, 1);
	Out.ar(0, [x,x] );
}).load(s);
)
このように音を配列に入れるとバス0とバス1に同時に送られることになります。つまりステレオです。しかし、実際はPan2を使って左右のパンを振れるようにしておいた方が何かと都合がいいです。

そして、Inを使ってバスから音を受け取ることも出来ます。
(
SynthDef("test", {
	var x;
	x=In.ar(10, 1);
	Out.ar(0, Pan2.ar(x, 0) );
}).load(s);
)
この例の場合は、バス10から受け取った音を、Pan2を使ってバス0とバス1のステレオチャンネルに出力しています。別のシンセ定義でバス10に音を送っていない場合、このシンセ定義"test"を実行してももちろん音は出ません。

コントロールバスを使う時は、まずサーバにコントロールバスを割り当てる必要があるみたいです。
正式な書き方ではきちんとバスのIDナンバーも指定して
s.sendMsg("/c_set", controlBusID, value);
s.sendMsg("/n_map", nodeID, arg, controlBusID);
の様に書くみたいですが、
b = Bus.control(s,1);
こう宣言するだけで充分です。この場合、デフォルトサーバsに1チャンネルのコントロールバスを割り当てています。このコントロールバスのIDを知らなくても"b.index"と書けばオッケーです。あとはInやOutにつけるメッセージ".ar"を".kr"に変えるだけでコントロールバスから信号を送ったり取り出したりできます。
// コントロールバスから1チャンネルのコントロール信号を受け取る
In.kr(b.index,1);
posted by u_p at 02:29 | Comment(0) | TrackBack(0)
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。