Модификаторы времени 🌀 Bulka

Модификаторы времени

Следующие функции каким-либо образом изменяют временную структуру 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

Synonyms: sparsity

Замедляет pattern на заданное количество циклов. Как оператор "/" в mini-нотации.

  • factor (number|Pattern): множитель замедления
s("bd hh sd hh").slow(2) // s("[bd hh sd hh]/2")

fast

Synonyms: 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

Synonyms: 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

        Synonyms: iterback

        Like 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

            Synonyms: 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

                Synonyms: 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 bpm

                        ribbon

                        Synonyms: rib

                        Loops 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)

                        Помимо изменения времени, существуют способы управления параметрами.