Дождитесь сообщения OSCdef в Supercollider, воспроизведите событие, но подождите X раз до следующего события - PullRequest
0 голосов
/ 17 октября 2018

Если я использую 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 секунд.

Я хочу знать, возможно ли поймать первую 1, сыграть событие и проигнорировать оставшиеся триггеры в течение следующих 10 секунд

1 Ответ

0 голосов
/ 17 октября 2018

Стоит обратить внимание на «подавление триггеров»:

Передача или подавление триггеров: вам может потребоваться генерировать триггеры непрерывно, но разрешить срабатывание триггеров только при выполнении условия.Умножение прекрасно справляется с этим: условие * триггер.Поскольку условие оценивается как 0, когда ложно, триггер будет заменен на 0, и ничего не произойдет, как хотелось бы. \ \ Для простого случая давайте уточним пример амплитуды микрофона, подавив триггеры, которые происходят в течение 1/4 секунды после предыдущего.var mic = In.ar (8, 1), амплитуда = Amplitude.kr (mic), trig = амплитуда> 0.2,
timer = Timer.kr (trig), // сколько времени прошло с последнего запуска?
FilterTrig = (таймер> 0,25) * Trig;

SendTrig.kr (FilterTrig, 0, амплитуда);

Источник: https://supercollider.github.io/tutorials/If-statements-in-a-SynthDef.html

...