Создаём секвенсор в Max/Msp.
29.06.2009 от admin
Ну вот, Я и созрел для продолжения серии статей по программам модульного программирования звука. Извиняюсь за долгое молчание перед теми, кто ждал чего-нибудь новенького. К сожалению времени, на сайт катастрофически не хватает, сами понимаете – лето на дворе.
И так в этой статье я расскажу про то, как сделать в Max/Msp простенький секвенсор. В принципе в этой программе можно сделать кучу разных секвенсоров и возможности их ограничиваются только вашей фантазией. Моя статья это всего лишь один из способов. Наш секвенсор будет чем-то напоминать шаговый секвенсор в FL studio, но пока только с одним синтезатором.
Начнём.
1. Темп и количество шагов.
Для изменения темпа и количества шагов в секвенции, существует объект [tempo]. Вставим его в наш патч с аргументами [120 1 16], где 120 - темп, 1 – множитель, 16- кол-во шагов. К первому входу объекта подключим [toggle] для запуска секвенции, ко второму и последнему объекты [number] для изменения темпа и количества шагов. Должно получиться так.
Объект [loadbang] и сообщения {set 120} и {set 16} нужны для того, чтобы при запуске патча значения объектов [number] были не нули, а 120 и 16.
Примечание: В квадратных скобках я буду писать объекты, а в фигурных так называемые сообщения, которые пишутся в Message Box.
2. Секвенсор.
Основой нашего секвенсора, т.е. местом, где мы будем отмечать ноты, будет [matrixctrl] этот объект выглядит, как тетрадь в клетку, где на перекрестии можно ставить точку, а информация о местоположении этой точки будет поступать на выход объекта. Эту информацию мы и будем использовать для изменения высоты тона. Я сделал размер матрицы 16x12, т.е. у меня будет 12 нот и 16 шагов. Для изменения размера матрицы нужно схватить её за правый нижний угол и тянуть до нужного размера, количество строк и столбцов показывается при изменении внизу в панели состояния. Для визуализации положения текущего шага, мы используем объекты [route] и [button]. В [route] впишем аргументы от 0 до 15, что соответствует количеству шагов. Таким образом, при поступлении номера шага с выхода [tempo] на вход [route], на соответствующем выходе [route] появляется сигнал, поступающий на кнопку [button] и она загорается жёлтым цветом. Чтобы загорающая кнопка соответствовала шагу в матрице нужно разместить их точно над перекрестиями матрицы и на вход объекта [matrixctrl] послать команду {getcolumn $1}. Эта команда выводит на правый выход матрицы информацию о положении точки активного столбца. В итоге мы получим следующую картину.
Если мы поставим точку на нижней строчке первого столбца, то при прохождении первого шага на выходе получим сообщение 000000000001, а если на последнем столбце верхней строчки, то 1000000000000 . Вроде всё нормально, но мне бы хотелось, чтобы было всё наоборот, т.е. первая нота 1000000000000, а последняя 1000000000000, не знаю как вы а я привык к возрастанию тона с низу вверх. Чтобы исправить эту ситуацию я воспользовался объектом [zl] с аргументом rev. Вообще этот объект производит разные действия со списками и имеет огромное количество аргументов (смотрите help), в данном случае аргумент rev переворачивает значение, поступающее на его вход, что мне и требуется.
Далее мне нужно из этой информации номер строки от 1 до 12, для этого я использую всё тот же объект [zl], но уже с аргументом sub 1. Объект с этим аргументом ищет в сообщении цифру 1 и сообщает её положение на левый выход. Например, при сообщении на входе 1000000000000 на выходе будет 1, а если на входе 0000000000001, то на выходе будет 12. Одновременно с этим на правом выходе появится 1. Если на входе нули, то на правом выходе тоже будет ноль.
Теперь давайте посмотрим, что нам это всё даёт.
1. Мы имеем на выходе номер строки, на которой поставлена точка от 1 до 12 при прохождении шага.
2. Мы также имеем сигнал 1 с правого выхода [zl sub 1] если точка есть и 0 если её нет на данном шаге.
Таким образом, второй сигнал можно использовать как note on и note off . А первый как информацию о высоте ноты. Например, если мы примем первую снизу строку матрицы за ноту C, высота тона которой равна 60, то нам всего лишь надо прибавить к первому сигналу 59 с помощью объекта [+].
Если вы захотите начать с другой ноты, то вам надо будет просто изменить слагаемое. В итоге на выходе объекта [+] мы получим значения от 60 до 71, что соответствует одной октаве от C до B. Для удобства я написал ноту напротив каждой строки с помощью комментария.
3. Синтезатор.
В первой статье, я уже рассказывал, как создать синтезатор и поэтому здесь останавливаться на этом не буду. Сделаем простейший FM синтезатор и с выхода [+] подадим сигнал на вход объекта [mtof], который, как вы помните, преобразует информацию о высоте MIDI ноты в частоту.
Для запуска объекта [function] используем сигнал с правого выхода [zl sub 1]. Для этого подключим его на левый вход объекта [gate], а на правый вход этого объекта подадим команду {bang}. [gate] пропустит команду {bang}на вход [function] при 1 на его левом входе.
Заключение.
В итоге получился вот такой секвенсор.
Ставим точки на матрице и запускаем. В принципе можно использовать его по-разному. Например, с помощью сигнала с [zl sub 1] запускать воспроизведение аудиофайла соответствующего номеру строки и т.д.
Файл патча можно скачать здесь. Сделанов Max/MSP 4.5 .
Экспериментируйте, комментируйте, задавайте вопросы и делайте замечания.
Рубрики: Извлечение звука | Комментарии (18) »
















08.07.2009 в 07:51
Огромное спасибо =))
08.07.2009 в 09:18
Вам спасибо, что проявляете интерес к теме. Надеюсь пригодится.
09.07.2009 в 06:54
Здравствуйте =) Извиняюсь за нубский вопрос,буду благодарен если поможите разобраться с уравнениями каторые пишутся вкачестве аргументов у обьектов [if]и [expr],как их составлять? Как определить значения? что озачают символы и.т.д
11.07.2009 в 15:47
Вот бы таблетку найти на max5=),ничего не слышали про такое?
11.07.2009 в 15:53
Рано ещё я думаю, но как только так сразу
почта ваша есть, если что сообщу. По вашему предыдущему вопросу почитайте там описания всех объектов max. Сачать можно с оф сайта или . Может быть сделаю перевод по некоторым объектам.
11.07.2009 в 17:57
Спасибо!Я правда в aнглийском не силён,но ничего, разберусь=)
14.07.2009 в 06:04
А вы начните делать перевод с первых обьектов по несколко штук и постепенно переведёте весь Referencе manual и ваш сайт станет неоценимой помощью для юзеров Max\Msp =))
15.07.2009 в 19:08
Может быть начну. Если это действительно интересно.
16.07.2009 в 04:51
Очень интересно и думаю не мне однаму.Извиняюсь за навязчивость , недавно попытался скомбинировать два autechre участка, добавил секвенсор по вашей технологии вобщем вот что получилось=))
16.07.2009 в 10:40
Хорошая комбинация получилась. Вообще в этих патчах аля autechre, можно многое подчерпнуть. Вы использовали интересную идею, использовав секвенсор для изменения огибающей. Вот об этом я и говорю, использование технологий ограничивается только фантазией.
21.07.2009 в 20:53
а нет ли в планах, рассмотреть вопрос конвертирования патчей в vst?
22.07.2009 в 10:21
Конечно мне бы хотелось рассмотреть все вопросы касающие Max, но к сожалению времени на сайт не так много. Да и сам я многого не знаю. По вашему вопросу попробую помочь, как только найду рабочую версию Pluggo. Если у вас есть ссылка сообщите пожалуйста
.
31.07.2009 в 19:46
Pluggo 3.5.4
оно?
есть ещё вот такая информация, может будет полезна в этом вопросе
а тут про plugbuilder
и ещё у меня при попытке сохранения любого патча как Build Collective / Application, max выдаёт ошибку и закрывается. вы не сталкивались с такой проблеммой?
31.07.2009 в 20:43
С торентов скачать не смогу. вы если можете пришлите свой патч на почту admin[собака]muzprog.ru, я у себя посмотрю. У меня таких проблем не было. Скорее всего проблема в max/msp, может версия max не совместима с версией pluggo.
03.08.2009 в 09:35
Тот же Pluggo, что на торренте.ру
03.08.2009 в 09:50
Спасибо большое. Сейчас скачаю, попробую.
03.08.2009 в 15:10
Ни пойму, Max for Live вышел уже или его ещё нет? У меня при загрузке Ableton Max вылетает =(
Кто нить пробовал их интегрировать?
03.08.2009 в 15:16
Нет. Он ещё не вышел. Он как я понял будет отдельным дистрибутивом распространяться. А Max 5 для его работы не нужен будет. Так что ждём.