Для основных ванильных объектов или внешних обычно используется переменное количество аргументов. Многие объекты, такие как [trigger]
, [select]
, [pack]
или [unpack]
, ведут себя таким образом и создают количество кслетов в зависимости от количества переданных им аргументов.
Однако для абстракций нет простого способа иметь переменное количество выходных данных в зависимости от количества переданных аргументов. Можно, но это скорее хак.
Давайте сначала рассмотрим некоторые приемы, облегчающие установку патчей.
Как вы можете видеть на следующем снимке экрана, объект [expr]
в вашем патче может быть легко заменен простым объектом Pd: [==]
Давайте посмотрим на MIDI-сообщения. MIDI-объекты выводят элементы иерархического дерева: канал, контроллер, значение в таком порядке, но справа налево (верно для всех объектов в Pd, крайний правый выход срабатывает первым). То, что вы хотите, это направить их в соответствии с номером контроллера, игнорируя номер канала. Для этого вам нужно изменить порядок двух первых выходов, чтобы вы могли использовать номер контроллера в качестве селектора в списке. Один из способов сделать это — упаковать числа и затем переупорядочить их в сообщении, используя символы доллара (осторожно, символы доллара в объектах сообщения работают с локальными сообщениями, они не имеют ничего общего с тем, что делают символы доллара в полях объектов). Другим методом может быть использование объекта [swap]
(использование [swap]
в этом случае уменьшит количество объектов в патче на один, но [pack]
и [message(
более универсальны, поэтому я показываю их здесь).
Что касается фактического вопроса о принятии n аргументов для изменения количества выходов: эта проблема состоит из двух отдельных проблем:
- Как определить количество аргументов
- Как динамически изменить количество розеток
До недавнего времени не было правильного способа обнаружить наличие аргументов. Поскольку Pd 0,50, есть [pdcontrol]
, который позволяет именно это.
Здесь используется [initbang]
, потому что [loadbang]
сработает слишком поздно для создания выходов. Вторая часть проблемы может быть решена либо с помощью метода, называемого «динамическое исправление', либо путем вывода списка вместо создания дополнительные розетки. Однако с выводом списка вам нужно будет перенаправить его позже, и тогда вы быстро получите патч, изображенный выше.
person
Max N
schedule
03.05.2020