Создать oneshot казалось элементарной задачей, пока я не запутался в куче соединений. Ну как-то разобрался.
Коробочка на картинке сверху. Для нее потребовалось создать два своих dial объекта, т.к. стандартный dial работает с целыми числами. Мои крутелки принимают действительное значение, если этот параметр будет моделироваться из-вне, обрезают его, устанавливают крутёлку в нужное положение и передают значение на выход. На выход передаётся значение так же, если пользователь изменяет значение. Первая изменяется от 0.0 до 1.0, вторая от -0.5 до 0.5. Более подробно про крутелку. Больше ничего примечательного в коробочке не делал.
Схема имеет три входа, они слева сверху, первый - bang сообщение, чтобы проиграть звук, остальные два - скорость и громкость проигрывания. LOAD - вызывает сообщение replace, которое уходит в буффе и просит его загрузить какой-нибудь звук. После этого, когда звук загружен, узнаем о звуке что-нибудь. Имя файла из последнего выхода info~ добавляется к команде set и дальше в текстовое поле коробочки. Длина файла нужна, чтобы знать сколько играть. "#0buffername" - такое имя буферу нужно для того, чтобы каждая копия патча могла играть СВОЙ звук, а не общий. Генерация сигнала происходит с блоков line~ или curve~, которые находятся слава. Блок line~ справа используется, чтобы ограничивать длину проигрываемого отрезка. Что же play~ принимает :) Можно представить график линии x1=0, y1=(начальная позиция в буфере), x2=(время проигрыша), y2=(конечная позиция в буфере). Теперь понятно как делать реверс. А ещё вы знаете, что такое loop? Теперь я сразу представляю сигнал правобокой пилы. Здесь ещё сразу оговорю, что делает curve~. Как ни странно, этот msp-объект генерирует кривую. Для проигрывания это нужно для того, чтобы создать эффект нелинейной скорости. Можно использовать, но я делал это исключительно в познавательных целях. PLAY посылает bang в два блока, которые на уровене комментария "выстрел". В (gate 2) заходит через правый вход, это вообще несущий сигнал, просто gate его отправляет в соответствующий выход. Здесь конкретно выбор выхода зависит от параметра reverse. Второй блок, куда отправляется bang при выстреле, это левый вход блока (float), который получая такое сообщение отправляет сохраненное через правый вход действительное значение в выход. Тут ещё нужно сказать, что $N в сообщениях служит для подстановки в них соответствующих входных аргументов. Я думаю здесь все понятно, если нет, то пообщаемся в комментариях :)
Что вообще можно сделать с этим примитивным объектом? Ничего кроме познания. Дальше я собрал небольшую 16-ти тактовую дорожку.
Сверху чекер включает генерацию тактов от 0 до 15 в ритме 120. Дальше эти такты отправляются на блок select сверху, которая по-очереди зажигает соответствующие лампочки, это сделано просто для наглядности, что такты бегут :) Можно было сделать обычный number box. Далее номер такта формирует сообщение "getcolumn N" которое отправляется в матрицу. Матрица возвращает столбик для соответствующего такта и затем этот столбик распределяется между тремя select блоками, которые при подаче 1 отправляют bang в соответствующий ek_shot патч. Далее сигнал складывается и далее в ek_output. Ну вот запускаем и все играет.. Если есть вопросы - спрашивайте, может я где-то перемудрил.
На будущее.. Теперь просто необходимо разобраться с объектами, которыми можно сохранять/загружать параметры через xml файл. Посмотреть preset объекты.
О__хуеть
ОтветитьУдалитьУсвоил :) Очень долго не мог врубиться как ты сделал такую красивую маленькую коробочку с крутельками, но потом разобрался.
ОтветитьУдалитьБолее подробно про крутелку :)) Глянь, я вот так делал. Ты уже разобрался с сохранением?
ОтветитьУдалитьДа, с сохранением разобрался. Там нужно все гуи пихнуть в верхний левый угол, у всего остального выставить Hide On Lock. Потом заблокировать и сохранить :)
ОтветитьУдалить:) Ну это понятно. Я о последнем абзаце, тоесть сохранение не патчеров, а их состояния. Тоесть, например, последний скриншот с 16-ти тактовой дорожкой. Я ещё не разобрался как сохранять состояния, чтобы при загрузке всё было настроено и готово было играть как я захотел.
ОтветитьУдалитьСкажите пожалуйста,как в максе получать инфу о аудио фаиле? длину в семплах,длителност вмилисекундах и т п?
ОтветитьУдалитьmstosamps~ - число отсчётов зная время в миллисекундах при заданной частоте дискретизации.
ОтветитьУдалитьпредпоследний выход info~ - время в миллисекундах.
Привет всем, подскажите плз как создать обьект.mxe для max msp? Можно ли это из обстракции что бы она была в виде патчера, но с расширением mxe вобщем как обычный обьект?
ОтветитьУдалитьПривет, аноним.
ОтветитьУдалитьmxe - max External. Для создания таких объектов существует MaxMSP SDK. Здесь начинается романтика C/C++... Извините, вопрос про абстракцию немного не понял :3
Просто я сделал абстракцию и подумал,что из неё
ОтветитьУдалитьнеплохо было бы сделать обьект т.е [обьект.mxe] c функциями моей абстракции =))
Еще вопросик, у меня стоит Max5, попробовал его интегрировать с Abletonом ничего не получилось, при запуске Ableton у Maxа пропадает верхняя панель где file, edit итд приходится его заново переустанавливать, скажите это баг крякнутого софта или я что то ни так делаю? Спасибо=)
ОтветитьУдалитьк сожалению не пробовал интегрировать в другие среды, да и max5 у меня только один runtime. так что помочь или ответить в данный момент времени точно не смогу :(
ОтветитьУдалитьСпасибо,буду резбераться =)Ссылка на кряк Max 5.0.7 http://ifolder.ru/13248221
ОтветитьУдалитьБлагодарю! Буду обновляться Х))
ОтветитьУдалитьСнова заработал форум http://maxmsp.ru/
ОтветитьУдалить