如果我使用OSCdef侦听某个功能的更改,例如:
OSCdef('listen', {
arg msg;
~trigger = msg[5]; // This value is 0 when off, 1 when on
~amp = msg[3].linexp(0.0, 1.0, 0.7, 0.8 );
~dur = msg[4].linexp(0.1, 1.0, 1.0, 0.01);
~pitch = msg[4].linlin(0.0, 1.0, 80, 800);
}, '/ctrl');
触发~trigger
时,变量变为1。我想播放合成器或打开env来更改声音。
但是,当~trigger
触发时,它会随机触发10秒,因此您将拥有1,1,0,1,0,0,0,1,0,01,01,01,01 ,1,01等10秒钟。
我想知道是否有可能在接下来的10秒钟捕捉到第一个1,玩一个事件并忽略其余的触发器
答案 0 :(得分:0)
值得一看的是“抑制触发器”:
传递或禁止触发:您可能需要生成触发 连续,但仅当 满足条件。乘法可以很好地处理:条件* 触发。由于条件为假时条件评估为0,因此触发 将被替换为0,并且没有发生任何变化。\ \为简单起见 情况下,让我们通过抑制触发来完善麦克风幅度示例 发生在前一个之后的1/4秒内。 var mic = In.ar(8, 1),幅度= Amplitude.kr(mic),trig =幅度> 0.2,
timer = Timer.kr(trig),//自上次触发起已持续多长时间?
filterTrig =(timer> 0.25)* trig;SendTrig.kr(filteredTrig,0,振幅);
来源:https://supercollider.github.io/tutorials/If-statements-in-a-SynthDef.html