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