рандом
тут представлены все функции, которые можно использовать для внесения случайности в ваши музыкальные паттерны. каждая функция представлена по одной и той же схеме:
- Сигнатура типа: как функция объявлена на стороне Haskell.
- Описание: словесное описание функции.
- Примеры: небольшой список примеров, которые можно скопировать и вставить в редактор.
Псевдорандомизация
rand
rand - это генератор, генерирующий последовательность (псевдо) случайных чисел с плавающей запятой в диапазоне от 0,0 до 1,0. например, для случайного панорамирования стереополя можно:
или, чтобы наслаждаться случайной скоростью от 0,5 до 1,5, вы можете прибавить к значению 0,5.
irand
функция irand похожа на rand, но генерирует непрерывный генератор (псевдо) случайных целых чисел от 0 до n-1 включительно. в частности, используется для выбора случайных сэмпла из папки.
Перлинов шум
perlin
perlin создаёт 1D Perlin (гладкий) шум. jн работает как rand, но плавно переключается между случайными значениями в каждом цикле. например, можно плавно и случайным образом изменять скорость:
функция perlin генерирует новое случайное значение для каждого цикла. если вы хотите, чтобы новое случайное значение генерировалось чаще или реже, используйте fast или slow соответственно:
perlinWith
perlinWith позволяет указать паттерн в качестве входных данных для генерации случайных значений вместо использования количества циклов по умолчанию:
perlin2
perlin2 создает 2D шум, позволяя указать пользовательский паттерн в качестве второго измерения (номер цикла остается первым измерением):
perlin2With
perlin2With - это то же самое, что и perlinWith, за исключением того, что он позволяет предоставить две функции для 2D шума:
"sometimes"
sometimes
sometimes это функция, которая применяет другую функцию к паттерну примерно в 50% случаев случайным образом. для неё требуются два входных параметра: функция, которую нужно применить, и паттерн, к которому вы её применяете.
например, чтобы исказить половину событий в шаблоне:
sometimes имеет несколько вариантов, которые применяют функцию с разной вероятностью:
sometimesBy
если вы хотите уточнить, вы можете использовать sometimesBy и число, например:
применять контроль скорости в среднем 93 раза из 100.
someCycles
функция someCycles похожа на sometimes, но вместо применения заданной функции к случайным событиям она применяет её к случайным циклам. например, следующий код либо исказит все события в цикле, либо ни одно из них:
someCyclesBy
как и в случае с sometimesBy, для конкретики можно использовать someCyclesBy и число. например:
будет применять контроль скорости в среднем в 93 циклах из 100.
Выбор случайным образом
choose
функция choose выдает поток случайно выбранных значений из заданного списка в виде непрерывного паттерна:
как и в случае со всеми непрерывными паттернами, следует позаботиться о том, чтобы придать им структуру; в этом случае choose дает бесконечно подробный поток случайных выборов.
chooseby
функция chooseBy похожа на choose, но вместо случайного выбора элементов списка она использует заданный паттерн для выбора элементов.
wchoose
wchoose чем-то похожа на функцию choose, но позволяет «взвешивать» варианты, чтобы вероятность выбора некоторых вариантов была выше, чем вероятность выбора других. следующий пример похож на предыдущий, но вероятность выбора числа 2 в два раза выше, чем у чисел 0 или 3.
wchooseby
wchooseBy = wchoose, но вместо случайного выбора элементов списка она использует заданный шаблон для выбора элементов.
cycleChoose
= choose, но выбор производится только один раз за цикл:
markovPat
markovPat - это способ генерации (псевдо) случайных паттернов на основе Markov chains. Markov chain представляет собой не предопределённый паттерн, а предопределённую последовательность вероятностей. эти вероятности управляют переходами от одного шага к другому. что даёт прямой контроль над случайностью генерируемого шаблона. markovPat принимает три аргумента: длину последовательности, индекс начального шага и матрицу вероятностей.
сначала определите значения для каждого состояния. например, если вы хотите составить последовательность из трёх звуков: bd, sd и clap:
при таком сопоставлении «bd» имеет индекс 0, «sd» - индекс 1, а «clap» - индекс 2. Обратите внимание, что вы можете включать паузы, добавляя «~» в качестве одного из звуков.
затем определите вероятность того, что каждый шаг перейдёт в каждый другой шаг. обратите внимание: значения будут нормализованы, поэтому их сумма не обязательно должна равняться 1.
в приведенном выше примере вероятность повторения bd составит 10%, вероятность перехода в sd - 70%, а вероятность перехода в clap - 20%. если добавить это к шаблону с длиной последовательности 16 и начальным индексом 0:
как и другие источники случайности, ритмическую структуру можно добавлять с помощью таких функций, как mask.