2016-12-06 4 views
1

Я очень сильно запутал себя и нуждаюсь в вашей помощи. Я пытаюсь сделать небольшую функцию в Pure Data, которая говорит, что когда он находится toggle, он отправляет 1, но когда он не включен, он позволяет вычислять значение.Pure Data help. Как использовать условную логику в Pd

Так что программа работает значение 1 или 2 и когда toggle не на вычисленное значение проходит, но когда togggle на него посылает 1 через.

Я бы показал свой код, но его Pd, поэтому я не могу его скопировать и вставить. Моя попытка до сих пор использует spigots, но это не работает, по-прежнему отправляя 1, вне зависимости от того, что делает toggle, и я знаю, что значение вычисляется.

В обычном коде я хотел бы сделать что-то вроде:

value = computedVal 

if (toggle == 1) then return 1; 

else return value; 

ответ

1

Там больше чем один способ решить эту проблему. Предполагая, что вы хотите 1, который будет разослан каждый раз, когда computedVal изменения в то время как toggle является 1, это может выглядеть следующим образом:

conditional statement

1

Вот решение с помощью демультиплексора идиомы:

enter image description here

в основном префиксы входящего сообщения с меткой (0 или 1), а затем маршрутизировать данные соответствующим образом.

В общем, вы должны научиться думать в потоке данных, а не потока управления: каким образом вы получаете данные в ту часть пластыря, где это необходимо. Попытка имитировать управляющий поток (if ... then ..., или, что еще хуже, while ... do ...) только растопит ваши мозги.

0

Лучше всего поддерживать поток в одном и том же виде от начала до конца (в данном случае float). Вы можете сделать решение, используя только объекты [f], [pack], [t b], [t b f] и [route]. Может быть, [обмен], если вы чувствуете себя странно. Объект [пинг] более полезен для , а не, отправляющий сообщения.

Кроме того, если я правильно понял, у вас могут возникнуть проблемы с [переключением]. Объект [переключить] будет на при любом ненулевом значении и выключен с нулевым значением. Если вы даете [переключить] один (1) или два (2), он будет действовать так, как если бы он был на в обоих случаях. Вы можете использовать [==], чтобы исправить это, которое выведет true (1) или false (0), но только если вы предоставите такой аргумент, как [== 1]. Таким образом, два (2) будут регистрироваться как ноль (0), поверните [переключить] с и верните свое значение.

two alternative solutions

Честно, хотя, для менее головных болей и повторно удобства и простоты, вы должны рассмотреть вопрос выбор шаблона в рабочем процессе, аналогичном присущей истинному (1) и ложной (0) парадигмы puredata в. Это сделает логику намного проще в ваших будущих начинаниях и гораздо больше похожа на c-логику, в которой pureata кодируется и эмулируется.

Таким образом, если ваш логический оператор принимает или возвращает ноль (0) как false и ненулевое значение true, он будет работать более «логически» с другими предварительно созданными объектами puredata. Тогда ваша логика может выглядеть следующим образом:

more cohesive conditional logic

надеюсь, что это помогает!

1

Более простое решение, и вы можете установить значение переключения на любое число, 0 выключено, любое число больше 0 включено.

Solution

+0

проще, чем решение? также, до сих пор * каждый * ответ на этот вопрос имел «0 is * off *, любое другое число равно * on *" –

 Смежные вопросы

  • Нет связанных вопросов^_^