Модификаторы времени
Следующие функции каким-либо образом изменяют временную структуру pattern. Некоторые из них имеют эквивалентные операторы в Mini Notation:
| функция | mini |
|---|---|
"x".slow(2) | "x/2" |
"x".fast(2) | "x*2" |
"x".euclid(3,8) | "x(3,8)" |
"x".euclidRot(3,8,1) | "x(3,8,1)" |
slow
sparsityЗамедляет pattern на заданное количество циклов. Как оператор "/" в mini-нотации.
- factor (number|Pattern): множитель замедления
s("bd hh sd hh").slow(2) // s("[bd hh sd hh]/2")fast
densityУскоряет pattern в заданное количество раз. Используется "*" в mini-нотации.
- factor (number|Pattern): множитель ускорения
s("bd hh sd hh").fast(2) // s("[bd hh sd hh]*2")early
Сдвигает pattern, чтобы начать раньше во времени. Эквивалент оператора <~ из Tidal
- cycles (number|Pattern): количество циклов для сдвига влево
"bd ~".stack("hh ~".early(.1)).s()late
Сдвигает pattern, чтобы начать позже во времени. Эквивалент оператора ~> из Tidal
- cycles (number|Pattern): количество циклов для сдвига вправо
"bd ~".stack("hh ~".late(.1)).s()clip / legato
legatoУмножает длительность на заданное число. Также обрезает sample в конце, если они превышают длительность.
- factor (number|Pattern): = 0
note("c a f e").s("piano").clip("<.5 1 2>")euclid
Изменяет структуру pattern для формирования Евклидового ритма. Евклидовы ритмы - это ритмы, полученные с использованием наибольшего общего делителя двух чисел. Они были описаны в 2004 году канадским компьютерным ученым Годфридом Туссеном. Евклидовы ритмы очень полезны для компьютерной/ алгоритмической музыки, потому что они могут описать большое количество ритмов с помощью пары чисел.
- pulses (number): количество ударов/beats
- steps (number): количество шагов для заполнения
// Кубинский pattern tresillo.
note("c3").euclid(3,8)euclidRot
Как euclid, но имеет дополнительный параметр для 'вращения' результирующей последовательности.
- pulses (number): количество ударов/beats
- steps (number): количество шагов для заполнения
- rotation (number): смещение в шагах
// Бразильский ритм Самбы
note("c3").euclidRot(3,16,14)euclidLegato
Похож на euclid, но каждый импульс удерживается до следующего импульса,
поэтому пауз не будет.
- pulses (number): количество ударов/beats
- steps (number): количество шагов для заполнения
- rotation (): смещение в шагах
- pat ():
note("c3").euclidLegato(3,8)rev
Реверсирует все циклы в pattern. См. также revv для реверсирования всего pattern.
note("c d e g").rev()palindrome
Применяет rev к pattern через цикл, так что pattern чередуется между прямым и обратным.
note("c d e g").palindrome()iter
Divides a pattern into a given number of subdivisions, plays the subdivisions in order, but increments the starting subdivision each cycle. The pattern wraps to the first subdivision after the last subdivision is played.
note("0 1 2 3".scale('A minor')).iter(4)iterBack
iterbackLike iter, but plays the subdivisions in reverse order. Known as iter' in tidalcycles
note("0 1 2 3".scale('A minor')).iterBack(4)ply
Функция ply повторяет каждое событие заданное количество раз.
s("bd ~ sd cp").ply("<1 2 3>")segment
segСемплирует pattern со скоростью n событий за цикл. Полезно для преобразования непрерывного pattern в дискретный.
- segments (number): количество сегментов за цикл
note(saw.range(40,52).segment(24))
compress
Сжимает каждый цикл в заданный timespan, оставляя промежуток
cat(
s("bd sd").compress(.25,.75),
s("~ bd sd ~")
)zoom
Воспроизводит часть pattern, указанную началом и окончанием временного промежутка. Новый результирующий pattern воспроизводится за период времени оригинального pattern:
s("bd*2 hh*3 [sd bd]*2 perc").zoom(0.25, 0.75)
// s("hh*3 [sd bd]*2") // эквивалентlinger
Выбирает заданную часть pattern и повторяет эту часть, чтобы заполнить оставшуюся часть цикла.
- fraction (number): дробь для выбора
s("lt ht mt cp, [hh oh]*2").linger("<1 .5 .25 .125>")fastGap
fastgapУскоряет pattern как fast, но вместо того, чтобы воспроизводить его несколько раз, как это делает fast, оставляет промежуток в оставшемся пространстве цикла. Например, следующее воспроизведёт звуковой pattern "bd sn" только один раз, но сжатым в первую половину цикла, то есть вдвое быстрее.
s("bd sd").fastGap(2)inside
Выполняет операцию 'внутри' цикла.
"0 1 2 3 4 3 2 1".inside(4, rev).scale('C major').note()
// "0 1 2 3 4 3 2 1".slow(4).rev().fast(4).scale('C major').note()outside
Выполняет операцию 'снаружи' цикла.
"<[0 1] 2 [3 4] 5>".outside(4, rev).scale('C major').note()
// "<[0 1] 2 [3 4] 5>".fast(4).rev().slow(4).scale('C major').note()cpm
Воспроизводит pattern с заданными циклами в минуту.
s("<bd sd>,hh*2").cpm(90) // = 90 bpmribbon
ribLoops the pattern inside an offset for cycles.
If you think of the entire span of time in cycles as a ribbon, you can cut a single piece and loop it.
- offset (number): start point of loop in cycles
- cycles (number): loop length in cycles
note("<c d e f>").ribbon(1, 2)// Looping a portion of randomness
n(irand(8).segment(4)).scale("c:pentatonic").ribbon(1337, 2)// rhythm generator
s("bd!16?").ribbon(29,.5)swingBy
Функция swingBy x n разбивает каждый цикл на n частей, а затем задерживает события во второй половине каждой части на величину x, которая относительна размеру (половины) части. Так что если x равно 0, ничего не происходит, 0.5 задерживает на половину длительности ноты, а 1 снова завернётся и не будет ничего делать. Конечный результат - shuffle или swing-подобный ритм
- subdivision (number):
- offset (number):
s("hh*8").swingBy(1/3, 4)swing
Сокращение для swingBy с 1/3:
- subdivision (number):
s("hh*8").swing(4)
// s("hh*8").swingBy(1/3, 4)Помимо изменения времени, существуют способы управления параметрами.