axjack's blog

axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz.

releaseの方法 in depth

では、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する方法である。