在 Pure Data 中自动设置 KNOB 对象的范围

Set the range of a KNOB object automatically in Pure Data

我有一个 Pure Data 补丁,它读取一些 MIDI 文件并对它们进行分析,然后用一些值创建一个 table。我需要提取此 table 的 MIN 和 MAX 值,然后使用它们来设置 KNOB 对象的范围。例如,假设在分析结果表明 table 的最小值和最大值分别为 3 和 29。现在我必须将这些值作为最小值和最大值范围提供给 KNOB 对象。这可能吗?我知道您可以更改属性的范围,但是 table 中的值每次都会有所不同,因此我需要根据从 table.[=10 中获得的值自动设置旋钮的范围=]

在那个问题上,table 总是在第一个位置有一个 0,所以补丁总是找到这个 0 作为最小值。我怎么能忽略这个 0 值呢?我正在使用对象 list-minmax.

从 table 计算最小值和最大值

要通过算法定义 knob 对象的范围,您可以向它发送消息 range <min> <max>:

至于table第一位总是0,我不明白为什么会这样。 table 中的任何索引都可以有任何值。也许你不知道在 Pd 中,table 的第一个索引是 0,所以如果你从索引 1 开始向它写入值,那么索引 0 将具有默认值 0.

您也可以在默认范围内使用 [旋钮](例如 0..10..127),然后对数字应用一些缩放偏移以获得您想要的范围:

例如以下将输出 -2(左侧旋钮)和 -5 之间的值:

[knob]
|
[/ 127]
|
[* -3]
|
[- 2]
|
[print]

这样做的好处是您可以在补丁中看到逻辑,而不是有一些黑盒子(在 [旋钮] 内为您完成所有的魔法。 它还可以轻松应用非线性。