Понимание 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 элемента, поэтому темп меняется.