在Supercollider中等待OSCdef消息,播放事件,但在下一个事件之前等待X时间

时间:2018-10-17 06:39:08

标签: supercollider

如果我使用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,玩一个事件并忽略其余的触发器

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