max / msp:取决于col的长度从col中随机选择

时间:2019-01-09 18:57:55

标签: random collections maxmsp

不同数量的列表存储在 coll 对象中。然后将一系列的刘海提供给随机整数生成器。每次爆炸,生成的整数将决定哪个列表将从 coll 中剔除。显然,该数字必须介于1和 coll 的不同长度之间。这意味着RND生成器在生成整数之前必须考虑 coll 的任何更改长度。因此,我想我们的电路如下:

  1. loadbang 编辑的消息'长度'必须输入 coll 对象以使其输出长度。
  2. 此长度数字必须进入“ 介于”(RND gen。)对象的右侧,以设置其最大值。
  3. 对象“ 之间”左侧输入的 bang 将生成一个随机整数。
  4. 该整数将返回 col ,并使其输出相应的存储列表。
  5. 输出列表将发送到迭代机制,该机制将逐个读取和输出其原子。
  6. 输出当前列表的最后一个原子时,新的 bang 将发送到“ 介于”对象中,以便选择新列表并该过程将重复进行(阶段3 – 6)。

上述过程的问题在于,它偶然发现了 coll 对象的功能: coll 会同时输出其长度和所有存储在同一出口的数据(为什么,我想知道?),但是在上述过程中, coll 的长度必须仅输出一次(在会话开始时),并且只能在两者之间输入' ”对象(因为它是无关紧要的,因此永远不要到达迭代机制)。因此, coll的长度及其数据的路由必须不同,尽管它们都是整数,并且都来自同一出口。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我发布了一个答复,其中包含我为您服务的解决方案,但主持人删除了它。

因此,我拍摄了一个屏幕截图,希望对您有所帮助。

从本质上讲,您可以将大量不同的消息(添加条目,选择条目,删除,重新编号...)放入coll中,而只有来自coll的消息才通过1-in-2-out开关进行操作。 / p>

开关的默认设置是将coll的输出路由到多滑块,消息框或任何地方。

但是,如果要捕获coll输出的长度,请使用: [trigger 0 length 1]-0和1转到开关的左侧输入,“ length”转到coll。

  • 首先向交换机发送一个1,将coll输出路由到您需要的位置
  • 然后向coll发送长度提示-它会传递开关的第二个输出
  • 然后用0关闭门-将coll的输出路由回到正常位置

每当您需要更新长度(例如在添加或删除条目之后)时,只需向触发模块发送一个爆炸声。

patch screenshot

答案 1 :(得分:0)

您是否调查过grab对象?接线有点违反直觉,但这在许多事情上都是有用的对象,包括在您描述的那种情况下充当“断路器”。

设置grab对象使您可以将消息定向到对象的入口,然后仅收集与该消息关联的输出 ,而不会影响可能连接的其他跳线到同一出口。

答案 2 :(得分:0)

最近几天,我通过使用gswitch2和触发器对象在消息的任意一侧打开和关闭它来解决了这个问题:[t 0 length 1]

coll已插入gswitch,因此仅在需要它们的那一刻将其消息路由到length函数,否则将其路由到需要coll内容的对象。

-exeterdown