2

我自己很困惑,需要你的帮助。我正在尝试在 Pure Data 中创建一个小函数,它表示当toggle它打开时发送 a1但当它不在时它允许计算值通过。

所以程序工作一个值1,或者2toggle计算值不在时通过,但当在时togggle它发送1通过。

我会显示我的代码,但它是 Pd,所以我不能复制和粘贴它。到目前为止,我的尝试是在使用,spigots但这不起作用,1无论toggle做什么,它仍然可以发送,而且我知道计算值会发生变化。

在普通代码中,我会执行以下操作:

value = computedVal

if (toggle == 1) then return 1;

else return value;
4

4 回答 4

4

更简单的解决方案,您可以将切换值设置为任意数字,0 为关闭,任何大于 0 的数字为开启。

解决方案

于 2017-06-20T21:22:43.417 回答
3

解决这个问题的方法不止一种。假设您希望1每次computedVal更改 while toggleis时都发送 a 1,它可能如下所示:

条件语句

于 2016-12-07T12:02:34.417 回答
3

这是使用解复用器习语的解决方案:

在此处输入图像描述

它基本上用标签(01)为传入消息添加前缀,然后相应地路由数据。

一般来说,你应该学会思考数据流,而不是控制流:你如何将数据送到需要它的补丁部分。试图模仿控制流if ... then ...或更糟while ... do ...)只会融化你的大脑。

于 2016-12-07T19:51:52.630 回答
1

最好从头到尾保持相同类型的流(在本例中为float)。您可以仅使用 [f]、[pack]、[tb]、[tbf] 和 [route] 对象来制定解决方案。如果你觉得很花哨,也许可以[交换]。[spigot] 对象对于发送消息更有用。

另外,如果我理解正确,您可能会遇到 [toggle] 本身的问题。[toggle] 对象将给定任何非零值时打开,并在零值时关闭。如果您给 [toggle] 一个 one(1) 或一个 two(2),它会在这两种情况下都处于开启状态。您可以使用 [==] 来解决此问题,这将输出 true(1) 或 false(0),但前提是您提供了类似 [== 1] 的参数。这样二(2)将注册为零(0),关闭 [toggle]返回您的值。

替代解决方案的两个示例:

两种替代解决方案

老实说,为了减少麻烦和可重用性和简单性,您应该考虑在工作流程中选择类似于 Pure Data 固有的 true(1) 和 false(0) 范例的模式。它将使逻辑在您未来的工作中变得更加简单,并且更类似于纯数据编码和模拟的 c 逻辑。

这样,如果您的逻辑语句接受或返回零(0)为假,非零为真,它将更“合乎逻辑地”与其他预构建的纯数据对象一起工作。然后你的逻辑可能看起来像下面的屏幕。

更有凝聚力的条件逻辑:

更有凝聚力的条件逻辑

我希望它有帮助!

于 2017-01-13T22:25:27.163 回答