Понимание Cycles 🌀 Bulka

Понимание Cycles

Концепция cycles является центральной для понимания того, как работает Strudel. Материнский язык Strudel, TidalCycles, даже имеет это в своем названии.

Cycles и BPM

В большинстве музыкальных программ для установки темпа используется единица BPM (ударов в минуту). Strudel выражает темп как CPS (cycles в секунду), по умолчанию 0.5 CPS:

s("bd")

Здесь мы можем услышать 0.5CPS в действии: Бочка повторяется один раз каждые две секунды. Давайте сделаем 4 бочки:

s("bd bd bd bd")

Теперь у нас 4 бочки на cycle, но весь pattern все еще воспроизводится на 0.5CPS. С точки зрения BPM, большинство музыкантов скажут вам, что это воспроизводится на 120bpm. А как насчет этого:

s("bd hh bd hh")

Поскольку второй звук теперь хай-хэт, темп снова ощущается медленнее. Это приводит нас к важному осознанию:

Темп основан на восприятии. Выбор звуков также влияет на ощущение темпа. Вот почему один и тот же CPS может создавать разные воспринимаемые темпы.

Установка CPM

Если вы знакомы с BPM, вы можете использовать метод setcpm для установки глобального темпа в cycles в минуту:

setcpm(110)
s("bd hh")

Если вы хотите добавить больше ударов на cycle, вы можете разделить cpm:

setcpm(110/4)
s("bd sd bd rim, hh*8")

Или используя 2 удара на cycle:

setcpm(110/2)
s("bd sd, hh*4")

Вы можете использовать метод setcps для установки глобального темпа в cycles в секунду. setcpm(x) это то же самое, что setcps(x / 60).

Чтобы установить конкретный bpm, используйте setcpm(bpm/bpc)

  • bpm: целевые удары в минуту
  • bpc: количество воспринимаемых ударов на cycle

Cycles и такты

Также в большинстве музыкальных программ несколько ударов образуют такт (или меру). Так называемый размер такта определяет, сколько ударов в каждом такте. Во многих типах музыки обычно используется 4 удара на такт, также известный как размер 4/4. Многие музыкальные программы используют его по умолчанию.

Strudel не имеет концепции тактов или мер, есть только cycles. Как вы их используете - решать вам. Выше у нас был этот пример:

setcpm(110/4)
s("bd sd bd rim, hh*8")

Это можно интерпретировать как размер 4/4 с темпом 110bpm. Мы могли бы написать несколько тактов так:

setcpm(110/4)
s(`<
[bd sd bd rim, hh*8]
[bd sd bd rim*2, hh*8]
>`)

Вместо того чтобы выписывать каждый такт отдельно, мы могли бы выразить это гораздо короче:

setcpm(110/2)
s("bd <sd rim*<1 2>>,hh*4")

Здесь мы можем видеть, что мышление в cycles, а не в тактах, значительно упрощает дело! Эти типы упрощений работают из-за повторяющейся природы ритма. В вычислительных терминах можно сказать, что прежняя нотация имеет много избыточности.

Размеры такта

Чтобы получить размер такта, просто измените количество элементов на такт. Вот ритм с 7 ударами:

s("bd ~ rim bd bd rim ~")

или с 5:

s("bd hh hh bd hh hh bd rim bd hh")

Мы также могли бы написать несколько тактов с разными размерами:

setcpm(110*2)
s(`<
[bd hh rim]@3
[bd hh rim sd]@4
>`)

Здесь мы переключаемся между 3/4 и 4/4, сохраняя один и тот же темп.

Если мы не указываем длину, мы получаем то, что называется метрической модуляцией:

setcpm(110/2)
s(`<
[bd hh rim]
[bd hh rim sd]
>`)

Теперь 3 элемента получают то же время, что и 4 элемента, поэтому темп меняется.