如何使用 PureData 中的循环写入数组?

How to write to arrays using loops in PureData?

我在 Pure Data 中使用循环在数组中写入随机数。出于某种原因,在 loop one Pure Data 从索引 1 而不是 0 开始写入,并在循环后在索引 0 上完成,这不是我想要的。在 loop two 中,我找到了一个使用额外 [f][bang] 的解决方案,Pure Data 从索引 0 开始执行预期的操作。在这两种情况下,控制台都会打印数据相同的顺序(数字是随机的,顺序是相同的),只是反映数组的图形不同。

有谁知道为什么第一种情况失败而第二种情况有效?我的猜测是它与数据流入 [tabwrite] 的左右入口有关。

循环一

代码

控制台

图表(1.151 在索引 1 而不是索引 0 上)

循环二

代码

控制台

图表(1.742 在索引 0 上是正确的)

留言顺序。 您在 [f] 对象上有一个扇形输出。使用触发器 [t b f][trigger bang float] 的缩写)使顺序明确。如果您看到一个原子在一个输出上有多个连接,那就是一个危险信号!始终使用触发器对象,因为如果没有它们,您建立连接的顺序将是消息发送的顺序。这在补丁中是不可见的,所以应该避免!

阅读more about message order in the documentation of Pd

你的补丁还有一个问题。考虑这种情况:如果 NotasPor0it 为 8,计数器为 6,则 NotasPor0it 变为 4,select 对象 [sel] 将永远不会触发counter idiom 并继续计数...为避免此问题,您可以使用 'larger as' [>] 符号,或使用模数 (%) 解决它,如屏幕截图所示。