0

関数定義がある場合:

{ SinOsc.ar(440, 0, 0.2) }.play;

同等のものは次のとおりです。

SynthDef.new("SinOsc", { Out.ar(0, SinOsc.ar(440, 0, 0.2)) }).play;

ステレオの場合は、単に次のように言います。

SynthDef.new("SinOsc", { Out.ar([0,1], SinOsc.ar(440, 0, 0.2)) }).play;

これをしたい場合はどうしますか:

{ [ Mix( [ SinOsc.ar(440, 0, 0.2) ] ),  Mix( [ Saw.ar(662,0.2) ] ) ] }.play;

SynthDefに相当するものは何ですか? その上、上記の関数を定義するよりエレガントな方法はありますか?

4

2 に答える 2

3

Out.arSynthDef に相当するものは、すでに書いたものと非常によく似た、synthdef でラップする (および を追加する) だけです。

 { [ Mix( [ SinOsc.ar(440, 0, 0.2) ] ), Mix( [ Saw.ar(662,0.2) ] ) ] }.play;

 SynthDef("crazycats", { Out.ar(0, [ Mix( [ SinOsc.ar(440, 0, 0.2) ] ), Mix( [ Saw.ar(662,0.2) ] ) ]) }).add;
 Synth("crazycats");

あなたの質問SynthDef(...).playでは、これは本当に正しいことではないと書いています。そのため、上に 2 行を書きました。1 行は SynthDef を定義し、もう 1 行はそれをインスタンス化します。

Mixそして、それぞれにオシレーターが 1 つしかないため、これらのオブジェクトは必要ありません。

 { [ Mix( [ SinOsc.ar(440, 0, 0.2) ] ), Mix( [ Saw.ar(662,0.2) ] ) ] }.play;

 { [ SinOsc.ar(440, 0, 0.2), Saw.ar(662,0.2) ] }.play;

したがって、synthdefは次のように優れています

 SynthDef("crazycats", { Out.ar(0, [ SinOsc.ar(440, 0, 0.2) , Saw.ar(662,0.2) ]) }).add;
 Synth("crazycats");
于 2016-01-09T11:04:54.313 に答える