では、OSCコマンド(Server Command)でreleaseさせるにはどうすればよいのだろう?
と前回書いたのだが、もう少しまとめる。というよりもっと前にも書いていた。今回含め3回も書くぐらいだし、releaseは重要なのだ。
releaseするには、大きく分けると、
- setメソッド
- releaseメソッド
- sendMsgメソッド
の3つ方法がある。このうち、set/releaseメソッドはnodeインスタンスの、sendMsgメソッドはserverインスタンスのメソッドである。どれをいつ使うかは状況次第。
コード
//SynthDef
(
SynthDef(\h,{
|amp=0.3,gate=1,rT=1,freq=440|
var sig,e,eg;
sig = SinOsc.ar(freq) + SinOsc.ar(freq + 1);
e = Env.adsr(releaseTime:rT);
eg = EnvGen.kr(e,gate,doneAction:2);
sig = sig * eg;
Out.ar(0,Pan2.ar(sig,0,amp));
}).add;
)
/* how to release */
//set
~x = Synth(\h,[\amp,0.1,\rT,0]);
~x.set(\rT,5);
~x.set(\gate,0);
//set gate: negative value
~x = Synth(\h,[\amp,0.1,\rT,0]);
~x.set(\gate,-5-1);
//release
~x = Synth(\h,[\amp,0.1,\rT,0]);
~x.release(5);
//sendMsg release -> gate: 0
~x = Synth(\h,[\amp,0.1,\rT,0]);
s.sendMsg('/n_set',~x.nodeID,\rT,5);
s.sendMsg('/n_set',~x.nodeID,\gate,0);
//sendMsg gate: negative value
~x = Synth(\h,[\amp,0.1,\rT,0]);
s.sendMsg('/n_set',~x.nodeID,\gate,-5-1);
メモ
/* how to release */以降は全て5秒でreleaseする方法である。