1
( 

SynthDef(\testEvt,{
    arg out, gate = 1;
    var sint = Blip.ar(440) * Linen.kr(gate,doneAction:2,releaseTime:0.8);
Out.ar(out, Pan2.ar(sint, 0));
}).add();

Synth(\testEvt) 
(instrument: \testEvt, freq:220, sustain: inf).play;
(instrument: \testEvt,freq:220).play;

)

SynthDef の後に 1 行目と 2 行目を実行すると、永久に再生されるシンセが作成されますが、3 行目のシンセは生成されたイベントのデフォルト値に従って 0.8 秒間再生されます。

問題は、SynthDef のどこにも「sustain」を使用せず、リネンがあるという理由だけで自動的に使用することです。

同じことが freq では起こりません。イベントは 440 で再生され、220 では再生されません。これは、SynthDef が引数として「freq」を使用しないためです。では、なぜサステインは同じルールに従わないのでしょうか?

また、イベントによって作成されたシンセを参照する方法はありますか? そうすれば、彼らがsustain: inf議論したときに、後で解放することができます。

4

2 に答える 2

2
(instrument: \testEvt, freq:220, sustain: inf).play;

(instrument: \testEvt,freq:220).play;

イベントです。イベントは多くのことを処理します。彼らが行うことの 1 つは、ゲートを 0 に設定するタイミングを計算することです (gate は SynthDef の引数の 1 つであることを思い出してください)。2 番目の例では、デフォルトのデュレーションを使用し、そのデュレーションが経過した後にゲートをゼロに設定します。Event.sc ソース ファイルを調べると、イベント環境変数で使用されているキーワードを確認できます。持続を検索すると、タイミングに使用される他のキーワードが見つかります。これらの 1 つが dur です。これを試して:

(instrument: \testEvt, dur:3).play

Freq はイベントのキーワードでもありますが、freq 引数がないため、synthDef に影響を与えることはできません。周波数を設定する場合は、次のように変更する必要があります。

SynthDef(\testEvt,{
    arg out, gate = 1, freq = 440;
    var sint = Blip.ar(freq) * Linen.kr(gate,doneAction:2,releaseTime:0.8);
    Out.ar(out, Pan2.ar(sint, 0));
}).add();

イベントとシンセの直接制御との対比については、以下を試してください: a = Synth.new(\testEvt, [\out, 0, \gate, 1])これらはシンセ定義の引数ではないため、効果がありません。また、Event とは異なり、synth はユーザーに代わって計算を行いません。ノートを終了させたい場合は、自分でゲートを 0 に設定します: a.set(\gate, 0)

イベント環境変数は Pbind によっても使用され、それらを使用することで他のことに影響を与えることができるため、イベント環境変数に注意することをお勧めします。サステインを他の何かの引数として使用するシンセ定義があった場合、デュレーションが変更されて驚くかもしれません。

于 2013-06-22T21:06:14.527 に答える