Как стать автором
Обновить

Milkdrop – математика во всей её красе

Milkdrop – что такое и зачем это нужно?
image
Milkdrop (далее просто md) – это плагин для популярного проигрывателя Winamp, который позволяет нам при прослушивании музыки наблюдать очень красивые, завораживающие, временами с оттенками психоделики, визуализации.Так же этот плагин используется VJ, для создания видео инсталляций и тд. Когда я впервые увидел невероятные узоры, которые к тому же двигались в такт с музыкой, я был потрясён. Каждая отдельная визуализация это насыщенное визуальное путешествие сквозь звук.


Предложу к просмотру небольшое видео, позволяющее понять, что же представляют из
себя эти самые визуализации.


Написан этот плагин человеком по имени Ryan Geiss(домашняя страница — www.geisswerks.com), который ранее работал в Nullsoft, Nvidia, а в данный момент он является сотрудником Microsoft, где принимает участие в разработке Project Natal.

Прелесть md в том, что написать свою собственную визуализацию для этого плагина гораздо проще, чем это кажется на первый взгляд. Для этого вам не нужно быть чрезмерно искушённым математиком или графическим дизайнером. В этой статье я хотел бы рассказать о самых основах создания пресетов для md. Возможно кому-нибудь из вас придётся по душе это занятие :)

Можно поподробнее?

Итак, всё что нам нужно для того чтобы начать это последняя версия проигрывателя winamp(на данный момент это 5.572). Запустите в нём какую-нибудь музыку, желательно с чётко выраженным битом и нажмите ctrl+shift+k. Должно появиться окошко с визуализацией, к тому же не просто визуализацией, а именно плагином milkdrop. (Если же по каким то причинам там не milkdrop, а другой плагин, то пройдите в настройки и в разделе plugins > visualization выберите milkdrop 2.2 и start). Когда окошко плагина является активным нажмите “L” и вы увидите список всех preset’ов, которые находятся в папке с вашим винампом. (дефолтный путь winamp\plugins\milkdrop2\presets\)
Поперемещайтесь по списку, их там достаточно много (чтобы выбрать что-нибудь нажмите enter). Они замечательные, не правда ли? :)
По нажатию F1 можно увидеть список большинства нужных хоткеев.

Свой велосипед

Итак, приступим к созданию абсолютно своей визуализации.
Для начала проясню: каждый пресет – это файл, вида mypreset.milk, который содержит в себе текст, используемый плагином для отрисовки изображения. На данном этапе нам понадобится заготовка, которая содержит в себе ряд настроек позволяющих нам получить в окошке визуализации самое примитивное отражение музыки. Никаких цветов, вращений, вообще ничего. Только лишь прыгающие линии.
Для этого нужно создать файл с расширением milk в папке с пресетами и поместить в него следующий код:

[preset00]
fRating=3.000000
fGammaAdj=1.000000
fDecay=0.925000
fVideoEchoZoom=1.006596
fVideoEchoAlpha=0.000000
nVideoEchoOrientation=3
nWaveMode=7
bAdditiveWaves=1
bWaveDots=0
bModWaveAlphaByVolume=1
bMaximizeWaveColor=0
bTexWrap=0
bDarkenCenter=0
bMotionVectorsOn=0
bRedBlueStereo=0
nMotionVectorsX=12
nMotionVectorsY=9
bBrighten=0
bDarken=0
bSolarize=0
bInvert=0
fWaveAlpha=4.099998
fWaveScale=1.285751
fWaveSmoothing=0.630000
fWaveParam=0.000000
fModWaveAlphaStart=0.710000
fModWaveAlphaEnd=1.300000
fWarpAnimSpeed=1.000000
fWarpScale=1.331000
fZoomExponent=1.000000
fShader=0.000000
zoom=0.999514
rot=0.000000
cx=0.500000
cy=0.500000
dx=0.000000
dy=0.000000
warp=0.010000
sx=1.000000
sy=1.000000
wave_r=0.650000
wave_g=0.650000
wave_b=0.650000
wave_x=0.500000
wave_y=0.500000
ob_size=0.500000
ob_r=0.010000
ob_g=0.000000
ob_b=0.000000
ob_a=0.000000
ib_size=0.260000
ib_r=0.250000
ib_g=0.250000
ib_b=0.250000
ib_a=0.000000


Пока вам не нужно задумываться о значениях всех этих параметров, оставьте это для будущего, наша цель на данном этапе это понять структуру всех этих штук. Сейчас же просто запустите эту заготовку в винампе ( L > и потом ваша заготовка ).
Мы должны получить на экране примерно следующее:

image

Теперь перед нами «чистый лист» и мы можем делать с ним всё что захотим.

В окошке визуализаций нажмите M (хоткей редактирования пресетов).
Далее мы увидим меню редактирование.
Собственно здесь мы и будем учиться делать первые шаги. Выберем пункт edit per_vertex equations
и поместим в открывшуюся консоль выражение вида:
zoom = 1 + 0.1*sin(-ang)
или
zoom = 1 + 0.1*sin(1/ang)
ну или
Zoom = 1 + sin(ang)/10
или что-нибудь совсем сумасшедшее:
zoom = 1.12 + sin(-2*ang)/9 — cos(rad + (2*x-y))/11

Как вы можете заметить изображение изменилось. Существенно изменилось.

Что же мы сделали?
Мы указали параметр (в данном случае zoom) и соотвественно то, что он должен из себя представлять в нашей заготовке. Полный список параметров, которые мы можем изменять, отображается в главном меню редактирования, в правом нижнем углу.
Теперь вы можете выполнять простейшие преобразования с пресетами. Попробуйте разные варианты, для того чтобы в дальнейшем создавать что-то очень сложное и красивое нужно будет понять зоны чуствительности для различных базовых параметров.
Будь то вращение (rot), либо масштабирование (zoom).

Добавим цвет

Цвет задаётся тремя значениями, одним для каждого из 3 главных составляющих (красный, зеленый, голубой) в диапазоне от 0 до 1. Для этого зайдём в per_frame редактирование и поместим туда следующие строки:

wave_r = wave_r + 0.5*sin(time*1.13);
wave_g = wave_g + 0.5*sin(time*1.23);
wave_b = wave_b + 0.5*sin(time*1.33);

ctrl-enter и мы видим как у нас начинают плавно изменятся цвета.

Вместо заключения

Всё что я описал тут является самой базовой информацией, что-то сродни “Hello World”
Если тема покажется кому-то интересной, то можно будет писать о более серьёзных вещах, а пока что я закончу этот пост.

Спасибо за внимание.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.