max/msp: случайный выбор из колла в зависимости от его длины

Различное количество списков хранится в объекте coll. Затем генератору случайных целых чисел передается серия ударов. С каждым ударом сгенерированное целое число будет решать, какой список будет исключен из coll. Очевидно, это число должно быть между 1 и переменной длиной coll. Это означает, что генератор RND должен учитывать любое изменение длины coll перед созданием целого числа. Итак, я думаю, у нас есть схема, подобная следующей:

  1. loadbang-ed messagelength’ должен войти в объект coll, чтобы он вывел свою длину.
  2. Этот номер длины должен попасть в правый вход объекта «между» (поколение RND), чтобы установить его максимум.
  3. челка на левом входе объекта «между» сгенерирует случайное целое число.
  4. Целое число вернется в coll и выведет соответствующий сохраненный список.
  5. Выходной список будет отправлен итерационному механизму, который будет считывать и выводить его атомы один за другим.
  6. Когда будет выведен последний атом текущего списка, объекту 'между будет отправлен новый bang, так что будет выбран новый список, и процесс будет запущен. повторный (этапы №3 – 6).

Проблема с описанным выше процессом заключается в том, что он натыкается на функциональность объекта coll: объект coll выводит и свою длину, и любые сохраненные данные из одного и того же выхода (почему, я интересно?), но в процессах, подобных приведенному выше, длина coll должна быть выведена только один раз (в начале сеанса) и должна передаваться только в 'между >' объект (он никогда не должен достигать механизма итерации, так как он не имеет значения). Следовательно, маршруты длины колла и его данных должны быть разными, хотя все они являются целыми числами и все они выходят из одного выхода.

Любые идеи, пожалуйста?


person spra    schedule 09.01.2019    source источник
comment
Можете ли вы опубликовать фрагмент кода?   -  person RiqueW    schedule 19.04.2019


Ответы (3)


Вы исследовали объект grab? Его проводка немного нелогична, но это полезный объект для многих вещей, в том числе для работы в качестве «автоматического выключателя» в той ситуации, которую вы описываете.

Настройка объекта grab позволяет направить сообщение на вход объекта, а затем собрать только выходные данные, связанные с этим сообщением, не затрагивая другие патч-корды, которые могут быть подключены к тому же выходу.

person RiqueW    schedule 19.04.2019
comment
захват действительно делает свою работу. Почему-то я до сих пор игнорировал это. Никогда не поздно. Спасибо. - person spra; 20.04.2019
comment
Привет, @spra… только что заметила твой ответ (да, 2 месяца спустя!) Не могли бы вы проголосовать и отметить мой ответ как принятый, пожалуйста? - person RiqueW; 20.06.2019
comment
Привет, RiqueW, только что заметил твой комментарий 7 месяцев спустя! :-) Итак, запись у меня! Я думал, что мне не разрешено голосовать из-за моих... несуществующих учетных данных (давно видел такое сообщение). Но я просто нажал на эту стрелку вверх, и теперь она показывает 1 голос. Извините, что так поздно, и еще раз спасибо. - person spra; 04.01.2020

Я отправил ответ с решением, которое я придумал для вас, но модератор удалил его.

Итак, я сделал снимок экрана, надеюсь, это поможет.

По сути, у вас может быть множество различных сообщений (добавление записей, выбор записей, удаление, перенумерация...) в колл, и только те, которые выходят из колла, проходят через переключатель 1-в-2-выходе.

Настройкой по умолчанию для переключателя будет маршрутизация вывода coll к мультиползунку, окну сообщений или куда-либо еще.

Однако в случае, если вы хотите захватить длину, выводимую из колла, используйте: [триггер 0 длина 1] - 0 и 1 идут на левый вход переключателя, а «длина» идет в колл.

  • сначала отправьте переключатель 1, чтобы направить вывод колла в нужное место.
  • затем отправьте колл запрос длины - он передаст второй выход коммутатора
  • затем закройте гейт с помощью 0 - маршрутизация вывода колла обратно в нормальное место

Каждый раз, когда вам нужно обновить длину (например, после добавления или удаления записи), вы просто отправляете этому триггерному модулю удар. скриншот патча

person user12654685    schedule 05.01.2020
comment
Теперь я понимаю, что вы имеете в виду. Да, это тоже хорошее решение. Спасибо за скриншот. - person spra; 05.01.2020

Я решил эту проблему за последние несколько дней, используя gswitch2 и объект триггера, чтобы открывать и закрывать его по обе стороны от сообщения: [t 0 length 1]

Колл подключается к gswitch, поэтому его сообщения направляются функциям длины только в тот момент, когда они необходимы, а в противном случае направляются к объектам, которым требуется содержимое колла.

-exeterdown

person user12650107    schedule 04.01.2020
comment
Я не уверен, как это работает. Объект триггера = [t 0 length 1] означает, что с каждым входящим сигналом он будет открывать первый выход gswitch, затем выводить «длину», а затем открывать второй выход gswitch. Но следующий входящий сигнал будет делать то же самое, а это не то, чего мы хотим. Что нам действительно нужно, так это механизм переключения, который выводит длину колла только один раз, а не для каждого сигнала. Так и не смог решить проблему вашим способом. Может я не понял вашу схему. Если вы считаете, что можете описать это более аналитически, то, возможно, я смогу это воспроизвести. - person spra; 04.01.2020