2016-12-06 69 views
1

我很困惑我自己,需要你的幫助。 我試圖做一個純數據中的一個小函數,它表示當toggle在它上面時發送一個1,但是當它不在它上時允許計算值通過。純數據幫助。如何在Pd中使用條件邏輯

所以程序工作的價值12toggle不上計算的值經過,但當togggle是它通過發送1

我會顯示我的代碼,但它的鈀,所以我不能複製和粘貼它。到目前爲止,我的嘗試是使用spigots,但是無論toggle在做什麼,它都不會繼續發送1,並且我知道計算值發生變化。

在正常代碼中,我會做這樣的事情:

value = computedVal 

if (toggle == 1) then return 1; 

else return value; 

回答

1

還有就是要解決這個問題的方法不止一種。假設你想要一個1要每次computedVal變化而toggle1,它可能看起來像這樣送出:

conditional statement

1

下面是一個使用解複用器成語的解決方案:

enter image description here

它基本上在傳入消息前加上一個標籤(01),然後相應地路由數據。

在一般情況下,你應該學會思考數據流,而不是控制流:你如何獲取數據到需要它的補丁的一部分。 試圖模仿控制流程if ... then ...,或更糟糕的while ... do ...)只會讓你的大腦融化。

0

這是最好保持在同類型的流量從開始到結束(在這種情況下浮動)。只能使用[f],[pack],[t b],[t b f]和[route]對象來制定解決方案。如果你喜歡幻想,也許會[交換]。 [spigot]對象對於發送消息的而不是更有用。

此外,如果我理解正確,您可能會遇到[toggle]本身的問題。給定任何非零值的[toggle]對象將爲,對於,並且具有零值的關閉。如果您正在給[切換]一個(1)或兩個(2),則在兩種情況下它都會像一樣在上運行。你可以使用[==]來解決這個問題,只有當你提供像[== 1]這樣的參數時,纔會輸出一個真(1)或一個假(0)。這樣,兩(2)將註冊爲零(0),將[toggle] 關閉,並返回您的值。

two alternative solutions

老實說,雖然,少頭痛和重新可用性和簡單,你應該考慮在您的工作流程類似PureData的固有真(1)和假(0)範式選擇的模式。它將使邏輯在未來的工作中變得更加簡單,並且與puredata編碼和模擬的c邏輯非常相似。

這樣,如果你的邏輯語句接受或返回一個零(0)爲假和一個非零爲真,它將更符合邏輯地與其他預建的puredata對象一起工作。然後,你的邏輯可能是這樣的:

more cohesive conditional logic

希望它能幫助!

1

更簡單的解決方案,您可以將切換值設置爲任意數字,0關閉,任何大於0的數字都會打開。

Solution

+0

比哪種解決方案更簡單?此外,迄今爲止*此問題的每個*答案都有「0是* off *,其他號碼是* on *」 –