August 28, 2025

изменение

здесь представлены все функции, которые можно использовать для управления и изменения ваших шаблонов. каждая функция представлена ​​по одной и той же схеме:

  • сигнатура типа: как функция объявлена ​​на стороне Haskell.
  • описание: словесное описание функции.
  • примеры: небольшой список примеров, которые можно скопировать и вставить в редактор.

масштабирование

range

range принимает шаблон от 0 до 1 (например, sine) и масштабирует его до другого диапазона - между первым и вторым аргументами. в приведённом ниже примере range 1 1.5 сдвигает диапазон sine с 0 - 1 до 1 - 1.5.

это =

rangex

rangex - это экспоненциальная версия функции range, описанной выше, которую удобно использовать для частот. например, range 20 2000 "0.5" даст 1010 — середину между 20 и 2000. но rangex 20 2000 0.5 даст 200 - середину между ними в логарифмической шкале. обычно это звучит лучше, если вы используете числа в качестве частот основного тона. rangex использует логарифмы, не пытайтесь масштабировать до нуля или ниже!

quantise

функция quantise полезна для округления набора чисел до определённой дроби. тип:

она округлит все значения до ближайшего (1/5)=0,2 и, таким образом, выведет список [0,0;1,2;2,6;3,2;4,8;5,0]. эту функцию можно использовать для приведения непрерывного шаблона, например, синуса, к заданным значениям. в примере:

все выбранные релизы округляются до ближайшей 0,1, а выбранные примечания - до ближайшей 1.

quantise с дробными входными данными выполняет последовательные действия: quantise 0.5 округляет значения до ближайших 2, quantise 0.25 округляет до ближайших 4 и т. д.

Degrade (снижение)

degrade

degrade случайным образом удаляет события из шаблона в 50% случаев. пример использования:

degradeBy

аналогично degrade, degradeBy позволяет контролировать процент удаляемых событий. например, чтобы удалять события в 90% случаев:

unDegradeBy

unDegradeBy - это degradeBy, но с процентом, описывающим, сколько событий в среднем следует сохранять, а не удалять.

repetitions (повторения)

ply

функция ply повторяет каждое событие заданное количество раз:

...=...

первый параметр может быть задан как шаблон, так что:

...=...

вот пример его условного использования:

stutter

stutter похоже на stut, которое не уменьшает громкость или ply, если вы контролируете временные отрезки. shutter n t повторяет каждое событие в шаблоне n раз, разделенное временем t (в долях цикла).

... функционально = ...

конкретные функции, которые используют shutter:

stripe

функция stripe повторяет шаблон со случайной скоростью. первый параметр задаёт количество циклов, которые необходимо выполнить. например, stripe 2 повторит шаблон дважды, за два цикла. каждый цикл будет воспроизводиться со случайной скоростью, но таким образом, чтобы общая длительность была одинаковой.

например, в следующем примере начало каждого третьего повторения шаблона d1 будет совпадать с хлопком в шаблоне d2.

slowstripe

функция slowstripe аналогична stripe, но результат также замедлен в n раз (где n - первый параметр функции). это означает, что средняя продолжительность полос составляет ровно один цикл, а каждая n-я полоса начинается на границе цикла. использование:

palindrome

функция palindrome применяет rev к шаблону каждый второй цикл, так что шаблон чередуется в прямом и обратном направлении:

... тож самое, что и:

... и включает это:

Truncation

trunc

функция trunc обрезает паттерн, так что воспроизводится только его часть. в примере воспроизводятся только первые три четверти паттерна:

можно задать шаблон первого параметра, например, для циклического прохождения трех значений, по одному на цикл:

linger

linger похож на trunc, поскольку он обрезает паттерн, так что воспроизводится только его первая часть. однако, в отличие от trunc, linger повторяет эту часть, чтобы заполнить оставшуюся часть цикла.

например, здесь повторяется первая четверть, поэтому вы слышите только одну повторяющуюся ноту:

или немного интереснее, применяется только каждый четвертый цикл:

ещё можно задать шаблон первого параметра, например, для циклического прохождения трех значений, по одному на цикл:

chunk

chunk делит шаблон на заданное количество частей, а затем циклически проходит по этим частям, применяя заданную функцию к каждой части по очереди (одна часть за цикл):

тут заглавными буквами выделена часть шаблона, к которой в течение четырех циклов применена функция (# speed 2):

... = ...

chunk'

chunk' делает то же самое, что и chunk, но циклически перебирает части в обратном направлении.

loopFirst

функция loopFirst принимает паттерн и лупит только его первый цикл. например, в следующем коде будет воспроизводиться только сэмпл большого барабана:

эта функция иногда комбинируется для случайной вставки событий из первого цикла в последующие циклы паттерна:

Shuffling and scrambling

bite

функция bite позволяет разбить каждый цикл на заданное количество битов одинакового размера, а затем воспроизводить эти биты по их номерам. похожа на функцию slice, но предназначена для нарезки паттернов, а не сэмплов. этот код разбивает шаблон на четыре бита, а затем воспроизводит их по очереди:

это по сути ничего не меняет, но вы можете изменить порядок этих частей:

shuffle

функция shuffle принимает на вход число и паттерн, делит паттерн на заданное количество частей и возвращает новый паттерн в виде случайной перестановки частей, выбирая по одному элементу каждой части за цикл. что-то типо «выборка без замены». например:

... иногда будет играть "sn bd hh" или "hh sn bd", но никогда не будет играть "bd sn bd" или "hh hh hh", потому что это не перестановка трех частей.

scramble

scramble принимает на вход число и паттерн, делит паттерн на заданное количество частей и возвращает новый паттерн, случайным образом выбирая из них части. = «выборка с заменой».:

... иногда будет воспроизводить "sn bd hh" или "hh sn bd", но также может воспроизводить "bd sn bd" или "hh hh hh", поскольку может составить любую случайную комбинацию из трех частей.

rot

функция rot «вращает» значения в паттерне, сохраняя его структуру. например, в следующем примере каждое значение сместится на позицию на один шаг влево, так что b займёт место a, a — место c, а c — место b:

результат =:

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

это не будет вращать паттерн в течение первых двух циклов, вращать его на единицу в третьем цикле и на три в четвертом цикле.

Step sequencers

step

step действует как простой пошаговый секвенсор, использующий строки. Например, step "sn" "x x 12 " эквивалентен шаблону строк, заданному как "sn ~ sn ~ sn:1 sn:2 ~". step подставляет заданную строку вместо каждого x, вместо каждого числа - строку с двоеточием и числом, а вместо всего остального - добавляет паузу.

другими словами, step генерирует шаблон строк в точности с тем синтаксисом, который нужен для выбора сэмплов, и который можно передать непосредственно в функцию s.

step'

«step'» похож на «step», но имеет более общий характер и использует числа в строке последовательности шагов в качестве индексов в списке строк, которые вы ему даете.

=

lindenmayer

функция lindenmayer принимает в качестве входных данных целое число b, набор правил системы Lindenmayer и инициирующую строку для генерации строки дерева L-системы из b итераций. её можно использовать вместе со ступенчатой ​​функцией для преобразования сгенерированной строки в воспроизводимый паттерн:

... генерирует L-систему с начальной строкой «0» и сопоставляет ее со списком образцов.

комплекмные деревья L-систем с множеством правил и итераций иногда могут приводить к большим строкам. использование take n для использования только первых n элементов строки, в сочетании с функцией slow, может сделать генерируемые значения более удобными для управления.

Higher-order

spread

функция распространения позволяет использовать преобразование паттерна, принимающее параметр, например, slow, и задать несколько параметров, между которыми можно переключаться. она типо «распространяет» функцию на несколько значений. тут на примере хайхетов:

можно ускорить в несколько раз. условно в 2:

или 3х:

но если юзать spread, то можем создать паттерн, который чередует две скорости:

многие функции такж поддерживают ввод шаблонов. это эквивалентно приведенному выше примеру:

если вы передадите ($) в качестве функции для распределения значений, вы можете указать другие функции в качестве списка значений. например:

к шаблону выше будут применены следующие преобразования, по одному за раз за цикл:

После (# speed "0.8") преобразования повторятся и снова начнутся с density 2.

spreadf

удобное сокр - $

fastspread

fastspread работает так же, как и spread, но результат сжимается в один цикл. если вы зададите для spread четыре значения, то результат ускорится в четыре раза:

сравнение 2-х значений

spreadChoose

функция spreadChoose (spreadr) работает так же, как и функция spread, но значения выбираются рандомным образом, по одному циклу за раз: