Первые эффекты
У нас есть звуки, у нас есть ноты, теперь давайте посмотрим на эффекты!
Некоторые базовые эффекты
фильтр низких частот
note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>")
.sound("sawtooth").lpf(800)lpf = low pass filter (фильтр низких частот)
- Измените lpf на 200. Обратите внимание, как звук становится приглушенным. Представьте себя стоящим перед клубом с закрытой дверью 🚪.
- Теперь давайте откроем дверь… измените значение на 5000. Обратите внимание, как звук становится ярче ✨🪩
паттерн фильтра
note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>")
.sound("sawtooth").lpf("200 1000 200 1000")- Попробуйте добавить больше значений
- Обратите внимание, что pattern в lpf не изменяет общий ритм
Мы узнаем, как автоматизировать с помощью волн позже…
vowel
note("<[c3,g3,e4] [bb2,f3,d4] [a2,f3,c4] [bb2,g3,eb4]>")
.sound("sawtooth").vowel("<a e i o>")gain
$: sound("hh*16").gain("[.25 1]*4")
$: sound("bd*4,[~ sd:1]*2")Ритм — это всё о динамике!
- Уберите
.gain(...)и обратите внимание, как плоско это звучит. - Верните его, отменив действие (ctrl+z)
Давайте объединим всё вышеперечисленное в небольшую мелодию:
$: sound("hh*8").gain("[.25 1]*4")
$: sound("bd*4,[~ sd:1]*2")
$: note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>")
.sound("sawtooth").lpf("200 1000 200 1000")
$: note("<[c3,g3,e4] [bb2,f3,d4] [a2,f3,c4] [bb2,g3,eb4]>")
.sound("sawtooth").vowel("<a e i o>")формирование звука с помощью adsr огибающей
note("c3 bb2 f3 eb3")
.sound("sawtooth").lpf(600)
.attack(.1)
.decay(.1)
.sustain(.25)
.release(.2)Попробуйте выяснить, что делают числа.. Сравните следующее
- attack:
.5vs0 - decay:
.5vs0 - sustain:
1vs.25vs0 - release:
0vs.5vs1
Можете ли вы угадать, что они делают?
- attack: время, необходимое для нарастания
- decay: время, необходимое для спада до уровня sustain
- sustain: уровень после decay
- release: время, необходимое для затухания после завершения ноты
![]()
короткая нотация adsr
note("c3 bb2 f3 eb3")
.sound("sawtooth").lpf(600)
.adsr(".1:.1:.5:.2")
delay
$: note("[~ [<[d3,a3,f4]!2 [d3,bb3,g4]!2> ~]]*2")
.sound("gm_electric_guitar_muted").delay(.5)
$: sound("bd rim").bank("RolandTR707").delay(".5")Попробуйте несколько значений delay между 0 и 1. Кстати, .5 — это сокращение от 0.5
Что произойдет, если вы используете .delay(".8:.125")? Можете ли вы угадать, что делает второе число?
Что произойдет, если вы используете .delay(".8:.06:.8")? Можете ли вы угадать, что делает третье число?
delay("a:b:c"):
- a: громкость delay
- b: время delay
- c: обратная связь (меньшее число = более быстрое затухание)
room aka reverb
n("<4 [3@3 4] [<2 0> ~@16] ~>")
.scale("D4:minor").sound("gm_accordion:2")
.room(2)Попробуйте разные значения!
Добавьте также delay!
небольшая даб-мелодия
$: note("[~ [<[d3,a3,f4]!2 [d3,bb3,g4]!2> ~]]*2")
.sound("gm_electric_guitar_muted").delay(.5)
$: sound("bd rim").bank("RolandTR707").delay(.5)
$: n("<4 [3@3 4] [<2 0> ~@16] ~>")
.scale("D4:minor").sound("gm_accordion:2")
.room(2).gain(.5)Давайте добавим бас, чтобы завершить это:
$: note("[~ [<[d3,a3,f4]!2 [d3,bb3,g4]!2> ~]]*2")
.sound("gm_electric_guitar_muted").delay(.5)
$: sound("bd rim").bank("RolandTR707").delay(.5)
$: n("<4 [3@3 4] [<2 0> ~@16] ~>")
.scale("D4:minor").sound("gm_accordion:2")
.room(2).gain(.4)
$: n("[0 [~ 0] 4 [3 2] [0 ~] [0 ~] <0 2> ~]/2")
.scale("D2:minor")
.sound("sawtooth,triangle").lpf(800)Попробуйте добавить .hush() в конце одного из паттернов в стеке…
pan
sound("numbers:1 numbers:2 numbers:3 numbers:4")
.pan("0 0.3 .6 1")speed
sound("bd rim [~ bd] rim").speed("<1 2 -1 -2>").room(.2)fast и slow
Мы можем использовать fast и slow для изменения темпа pattern вне Mini-Notation:
sound("bd*4,~ rim ~ cp").slow(2)Измените значение slow. Попробуйте заменить его на fast.
Что произойдет, если вы используете pattern вроде .fast("<1 [2 4]>")?
Кстати, внутри Mini-Notation fast — это *, а slow — это /.
sound("[bd*4,~ rim ~ cp]*<1 [2 4]>")модуляция с помощью сигналов
Вместо пошагового изменения значений мы также можем управлять ими с помощью сигналов:
sound("hh*16").gain(sine)Базовые формы волн для сигналов — это sine, saw, square, tri 🌊
Попробуйте также случайные сигналы rand и perlin!
Громкость gain визуализируется как прозрачность на пиано-ролле.
установка диапазона
По умолчанию волны колеблются от 0 до 1. Мы можем изменить это с помощью range:
sound("hh*16").lpf(saw.range(500, 2000))Что произойдет, если вы поменяете местами значения range?
Мы можем изменить скорость модуляции с помощью slow / fast:
note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>")
.sound("sawtooth")
.lpf(sine.range(100, 2000).slow(4))Теперь вся модуляция займет 8 циклов для повторения.
Итоги
| название | пример |
|---|---|
| lpf | note("c2 c3 c2 c3").s("sawtooth").lpf("<400 2000>") |
| vowel | note("c3 eb3 g3").s("sawtooth").vowel("<a e i o>") |
| gain | s("hh*16").gain("[.25 1]*2") |
| delay | s("bd rim bd cp").delay(.5) |
| room | s("bd rim bd cp").room(.5) |
| pan | s("bd rim bd cp").pan("0 1") |
| speed | s("bd rim bd cp").speed("<1 2 -1 -2>") |
| сигналы | sine, saw, square, tri, rand, perlins("hh*16").gain (saw) |
| range | s("hh*16").lpf(saw.range(200,4000)) |
Теперь давайте взглянем на некоторые типичные для Tidal эффекты pattern.