Для базовых ванильных объектов или внешних это обычная возможность принимать переменное количество аргументов. Многие объекты, такие как [trigger]
, [select]
, [pack]
или [unpack]
, ведут себя таким образом и создают количество xlets в соответствии с тем, сколько аргументов им дано.
Для абстракций однако, не существует простого способа иметь переменное количество выходов в зависимости от количества аргументов. Это возможно, но это скорее взлом.
Давайте сначала посмотрим на некоторые приемы, которые упростят патчи.
Как вы можете видеть на следующем скриншоте, объект [expr]
в вашем патче может легко заменяется простым объектом Pd: [==]
Давайте посмотрим на сообщения MIDI. Объекты MIDI выводят элементы иерархического дерева: канал , контроллер , значение в этом порядке, но справа налево (верно для всех объектов в Pd, крайняя правая розетка срабатывает первой). То, что вы хотите, это направить их в соответствии с номером контроллера, игнорируя номер канала. Для этого вам нужно изменить порядок первых двух розеток, чтобы вы могли использовать номер контроллера в качестве селектора в списке. Один из способов сделать это - упаковать числа и затем изменить их порядок в сообщении, используя символы доллара (осторожно, символы доллара в объектах сообщений работают с локальными сообщениями, они не имеют ничего общего с тем, что делают символы доллара в ящиках объектов). Другой способ - использовать объект [swap]
(использование [swap]
в этом случае уменьшит количество объектов на единицу в патче, но [pack]
и [message(
более универсальны, поэтому я покажу его здесь ).
По фактическому вопросу о принятии n аргументов для изменения количества торговых точек: эта задача представляет собой две отдельные проблемы :
- Как определить количество аргументов
- Как динамически изменить количество торговых точек
До недавнего времени не было правильного способа способ обнаружить наличие аргументов. Начиная с Pd 0,50 [pdcontrol]
, что позволяет именно это.
Использование здесь [initbang]
, поскольку [loadbang]
срабатывает слишком поздно для создания розеток. Вторая часть задачи может быть решена либо с помощью метода, называемого dynamici c patching , либо путем вывода списка вместо создания дополнительных точек. Однако с выходным списком вам нужно будет направить его потом, и тогда вы быстро придете к патчу, изображенному выше.