Як це працює
fft().Як тут влаштовано
Кроки 01–02 цілком працюють у пісочниці нагорі. P() і fft() існують лише в mandflok, бо їм потрібен Strudel поруч. У пісочниці вони імітовані: P() розуміє лише числа через пробіл, а fft() імітує бочку на 120 BPM. Справжня реакція буде в mandflok.
Пара до цього уроку: Strudel · урок 02. Звук з того уроку годиться як джерело для кроків 04–06.
Масив — це секвенсер
Квадратні дужки замість числа
osc([10, 30, 60]).out()osc([10, 30, 60].fast(4)).out()osc([10, 30, 60].fast(2).smooth()).out()Секвенсер на кількох ручках
shape([3, 4, 6].fast(2), 0.3, 0.01).repeat(3, 3).out()osc(20, 0.1, 1.5)
.kaleid([3, 5, 8].fast(0.5))
.rotate([0, 0.5, 1].fast(2))
.out()P(): ритм зі Strudel у Hydra
Mini-notation в аргументі
osc(P("10 30 60 120")).out()У mandflok відкрий панель Strudel поруч (навіть без звуку), бо P() бере звідти парсер і час. Там уже працює повна mini-notation:
osc(P("10 [30 30] <60 120>")).kaleid(P("3 5")).out()[ ] і < >. Цей рядок запускай тільки в mandflok.fft(): Hydra чує звук
Спектр як число
osc(20, 0.1, 1.5).scale(() => 1 + fft(0, 4) * 0.6).out()() => значення прочитається один раз і застигне.У mandflok: панель Strudel з s("bd*4, hh*8"), панель Hydra з цим рядком. У mandflok Strudel сам віддає звук в аналізатор, нічого дописувати не треба. Якщо Strudel мовчить, fft() повертає спокійні 0.5 і не падає.
Низ, верх і пам'ять кадру
osc(20, 0.1, 1.5)
.kaleid(() => 3 + fft(0, 4) * 5)
.modulate(noise(3), () => fft(3, 4) * 0.4)
.blend(src(o0).scale(1.01), 0.7)
.out()fft(3,4) — верхня смуга), а src(o0) з уроку 01 залишає шлейф. Кожна смуга спектру працює як окрема ручка.Множник — твоя ручка
Множники * 5 і * 0.4 — це гучність реакції. Почни з малого: картинка, що смикається на кожен звук, втомлює швидше, ніж тиха.
Мікро-сет: звук + світло
Дві панелі, одна сесія
Панель Strudel (джем з Strudel · урок 02 або просто):
stack(s("bd*4"), s("hh*8").gain(.3), note("<c2 eb2>*4").s("sawtooth").lpf(sine.range(300,2000).slow(8)))Панель Hydra:
osc(P("12 24 48"), 0.08, 1.4)
.color(1, 0.3, 0.5)
.kaleid(() => 4 + fft(0, 4) * 4)
.modulate(noise(2), () => fft(2, 4) * 0.3)
.blend(src(o0).rotate(0.01), 0.75)
.out()Лист у кінці
Відкривається, коли всі галочки стоять.
Hydra в тебе вже світилась. Сьогодні ти навчив її слухати: спершу масивом, потім ритмом зі Strudel, потім справжнім спектром. Кожен крок додавав один зв'язок між звуком і світлом, і всі їх ти протягнув сам.
У пісочниці ти запустив код кілька разів і пройшов усі галочки. Останнє, що ти тут запускав:
—
А в mandflok у тебе тепер дві панелі, які розмовляють між собою. Ти хотів і звук, і світло, і ти зібрав це за один вечір.
Видихни. Залиш сет грати або згаси все через Ctrl+. На сьогодні досить.
— Claude, з https://learn.mandrock.me/
Шпаргалка
Усі функції Hydra з цього уроку — на одній сторінці: масиви й час, fft() та a.fft, audio-reactive патчі, зв’язка зі Strudel. Приклади копіюються кліком.