diff --git a/packages/core/signal.mjs b/packages/core/signal.mjs
index c37ef400..7c931aff 100644
--- a/packages/core/signal.mjs
+++ b/packages/core/signal.mjs
@@ -143,7 +143,24 @@ export const rand = signal(timeToRand);
export const rand2 = rand.toBipolar();
export const _brandBy = (p) => rand.fmap((x) => x < p);
+
+/**
+ * A continuous pattern of 0 or 1 (binary random), with a probability for the value being 1
+ *
+ * @name brandBy
+ * @param {number} probability - a number between 0 and 1
+ * @example
+ * s("hh*10").pan(brandBy(0.2))
+ */
export const brandBy = (pPat) => reify(pPat).fmap(_brandBy).innerJoin();
+
+/**
+ * A continuous pattern of 0 or 1 (binary random)
+ *
+ * @name brand
+ * @example
+ * s("hh*10").pan(brand)
+ */
export const brand = _brandBy(0.5);
export const _irand = (i) => rand.fmap((x) => Math.trunc(x * i));
@@ -397,6 +414,8 @@ export const chooseInWith = (pat, xs) => {
* Chooses randomly from the given list of elements.
* @param {...any} xs values / patterns to choose from.
* @returns {Pattern} - a continuous pattern.
+ * @example
+ * note("c2 g2!2 d2 f1").s(choose("sine", "triangle", "bd:6"))
*/
export const choose = (...xs) => chooseWith(rand, xs);
@@ -423,6 +442,7 @@ Pattern.prototype.choose2 = function (...xs) {
/**
* Picks one of the elements at random each cycle.
+ * @synonyms randcat
* @returns {Pattern}
* @example
* chooseCycles("bd", "hh", "sd").s().fast(8)
@@ -451,10 +471,26 @@ const _wchooseWith = function (pat, ...pairs) {
const wchooseWith = (...args) => _wchooseWith(...args).outerJoin();
+/**
+ * Chooses randomly from the given list of elements by giving a probability to each element
+ * @param {...any} pairs arrays of value and weight
+ * @returns {Pattern} - a continuous pattern.
+ * @example
+ * note("c2 g2!2 d2 f1").s(wchoose(["sine",10], ["triangle",1], ["bd:6",1]))
+ */
export const wchoose = (...pairs) => wchooseWith(rand, ...pairs);
+/**
+ * Picks one of the elements at random each cycle by giving a probability to each element
+ * @synonyms wrandcat
+ * @returns {Pattern}
+ * @example
+ * wchooseCycles(["bd",10], ["hh",1], ["sd",1]).s().fast(8)
+ */
export const wchooseCycles = (...pairs) => _wchooseWith(rand, ...pairs).innerJoin();
+export const wrandcat = wchooseCycles;
+
// this function expects pat to be a pattern of floats...
export const perlinWith = (pat) => {
const pata = pat.fmap(Math.floor);
@@ -523,6 +559,11 @@ export const degrade = register('degrade', (pat) => pat._degradeBy(0.5));
* @returns Pattern
* @example
* s("hh*8").undegradeBy(0.2)
+ * @example
+ * s("hh*10").layer(
+ * x => x.degradeBy(0.2).pan(0),
+ * x => x.undegradeBy(0.8).pan(1)
+ * )
*/
export const undegradeBy = register('undegradeBy', function (x, pat) {
return pat._degradeByWith(
@@ -531,6 +572,21 @@ export const undegradeBy = register('undegradeBy', function (x, pat) {
);
});
+/**
+ * Inverse of `degrade`: Randomly removes 50% of events from the pattern. Shorthand for `.undegradeBy(0.5)`
+ * Events that would be removed by degrade are let through by undegrade and vice versa (see second example).
+ *
+ * @name undegrade
+ * @memberof Pattern
+ * @returns Pattern
+ * @example
+ * s("hh*8").undegrade()
+ * @example
+ * s("hh*10").layer(
+ * x => x.degrade().pan(0),
+ * x => x.undegrade().pan(1)
+ * )
+ */
export const undegrade = register('undegrade', (pat) => pat._undegradeBy(0.5));
/**
diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap
index 186de782..115a9ef1 100644
--- a/test/__snapshots__/examples.test.mjs.snap
+++ b/test/__snapshots__/examples.test.mjs.snap
@@ -1163,6 +1163,96 @@ exports[`runs examples > example "bpsustain" example index 0 1`] = `
]
`;
+exports[`runs examples > example "brand" example index 0 1`] = `
+[
+ "[ 0/1 → 1/10 | s:hh pan:false ]",
+ "[ 1/10 → 1/5 | s:hh pan:false ]",
+ "[ 1/5 → 3/10 | s:hh pan:true ]",
+ "[ 3/10 → 2/5 | s:hh pan:true ]",
+ "[ 2/5 → 1/2 | s:hh pan:false ]",
+ "[ 1/2 → 3/5 | s:hh pan:true ]",
+ "[ 3/5 → 7/10 | s:hh pan:false ]",
+ "[ 7/10 → 4/5 | s:hh pan:true ]",
+ "[ 4/5 → 9/10 | s:hh pan:false ]",
+ "[ 9/10 → 1/1 | s:hh pan:true ]",
+ "[ 1/1 → 11/10 | s:hh pan:true ]",
+ "[ 11/10 → 6/5 | s:hh pan:false ]",
+ "[ 6/5 → 13/10 | s:hh pan:false ]",
+ "[ 13/10 → 7/5 | s:hh pan:false ]",
+ "[ 7/5 → 3/2 | s:hh pan:true ]",
+ "[ 3/2 → 8/5 | s:hh pan:true ]",
+ "[ 8/5 → 17/10 | s:hh pan:true ]",
+ "[ 17/10 → 9/5 | s:hh pan:true ]",
+ "[ 9/5 → 19/10 | s:hh pan:true ]",
+ "[ 19/10 → 2/1 | s:hh pan:false ]",
+ "[ 2/1 → 21/10 | s:hh pan:false ]",
+ "[ 21/10 → 11/5 | s:hh pan:false ]",
+ "[ 11/5 → 23/10 | s:hh pan:true ]",
+ "[ 23/10 → 12/5 | s:hh pan:false ]",
+ "[ 12/5 → 5/2 | s:hh pan:false ]",
+ "[ 5/2 → 13/5 | s:hh pan:false ]",
+ "[ 13/5 → 27/10 | s:hh pan:false ]",
+ "[ 27/10 → 14/5 | s:hh pan:false ]",
+ "[ 14/5 → 29/10 | s:hh pan:true ]",
+ "[ 29/10 → 3/1 | s:hh pan:true ]",
+ "[ 3/1 → 31/10 | s:hh pan:true ]",
+ "[ 31/10 → 16/5 | s:hh pan:true ]",
+ "[ 16/5 → 33/10 | s:hh pan:false ]",
+ "[ 33/10 → 17/5 | s:hh pan:false ]",
+ "[ 17/5 → 7/2 | s:hh pan:false ]",
+ "[ 7/2 → 18/5 | s:hh pan:true ]",
+ "[ 18/5 → 37/10 | s:hh pan:true ]",
+ "[ 37/10 → 19/5 | s:hh pan:false ]",
+ "[ 19/5 → 39/10 | s:hh pan:false ]",
+ "[ 39/10 → 4/1 | s:hh pan:true ]",
+]
+`;
+
+exports[`runs examples > example "brandBy" example index 0 1`] = `
+[
+ "[ 0/1 → 1/10 | s:hh pan:false ]",
+ "[ 1/10 → 1/5 | s:hh pan:false ]",
+ "[ 1/5 → 3/10 | s:hh pan:false ]",
+ "[ 3/10 → 2/5 | s:hh pan:false ]",
+ "[ 2/5 → 1/2 | s:hh pan:false ]",
+ "[ 1/2 → 3/5 | s:hh pan:false ]",
+ "[ 3/5 → 7/10 | s:hh pan:false ]",
+ "[ 7/10 → 4/5 | s:hh pan:true ]",
+ "[ 4/5 → 9/10 | s:hh pan:false ]",
+ "[ 9/10 → 1/1 | s:hh pan:true ]",
+ "[ 1/1 → 11/10 | s:hh pan:true ]",
+ "[ 11/10 → 6/5 | s:hh pan:false ]",
+ "[ 6/5 → 13/10 | s:hh pan:false ]",
+ "[ 13/10 → 7/5 | s:hh pan:false ]",
+ "[ 7/5 → 3/2 | s:hh pan:false ]",
+ "[ 3/2 → 8/5 | s:hh pan:true ]",
+ "[ 8/5 → 17/10 | s:hh pan:true ]",
+ "[ 17/10 → 9/5 | s:hh pan:false ]",
+ "[ 9/5 → 19/10 | s:hh pan:false ]",
+ "[ 19/10 → 2/1 | s:hh pan:false ]",
+ "[ 2/1 → 21/10 | s:hh pan:false ]",
+ "[ 21/10 → 11/5 | s:hh pan:false ]",
+ "[ 11/5 → 23/10 | s:hh pan:false ]",
+ "[ 23/10 → 12/5 | s:hh pan:false ]",
+ "[ 12/5 → 5/2 | s:hh pan:false ]",
+ "[ 5/2 → 13/5 | s:hh pan:false ]",
+ "[ 13/5 → 27/10 | s:hh pan:false ]",
+ "[ 27/10 → 14/5 | s:hh pan:false ]",
+ "[ 14/5 → 29/10 | s:hh pan:false ]",
+ "[ 29/10 → 3/1 | s:hh pan:false ]",
+ "[ 3/1 → 31/10 | s:hh pan:false ]",
+ "[ 31/10 → 16/5 | s:hh pan:true ]",
+ "[ 16/5 → 33/10 | s:hh pan:false ]",
+ "[ 33/10 → 17/5 | s:hh pan:false ]",
+ "[ 17/5 → 7/2 | s:hh pan:false ]",
+ "[ 7/2 → 18/5 | s:hh pan:false ]",
+ "[ 18/5 → 37/10 | s:hh pan:false ]",
+ "[ 37/10 → 19/5 | s:hh pan:false ]",
+ "[ 19/5 → 39/10 | s:hh pan:false ]",
+ "[ 39/10 → 4/1 | s:hh pan:true ]",
+]
+`;
+
exports[`runs examples > example "cat" example index 0 1`] = `
[
"[ 0/1 → 1/4 | s:hh ]",
@@ -1242,6 +1332,31 @@ exports[`runs examples > example "channels" example index 0 1`] = `
]
`;
+exports[`runs examples > example "choose" example index 0 1`] = `
+[
+ "[ 0/1 → 1/5 | note:c2 s:sine ]",
+ "[ 1/5 → 2/5 | note:g2 s:bd n:6 ]",
+ "[ 2/5 → 3/5 | note:g2 s:sine ]",
+ "[ 3/5 → 4/5 | note:d2 s:triangle ]",
+ "[ 4/5 → 1/1 | note:f1 s:bd n:6 ]",
+ "[ 1/1 → 6/5 | note:c2 s:bd n:6 ]",
+ "[ 6/5 → 7/5 | note:g2 s:triangle ]",
+ "[ 7/5 → 8/5 | note:g2 s:triangle ]",
+ "[ 8/5 → 9/5 | note:d2 s:sine ]",
+ "[ 9/5 → 2/1 | note:f1 s:sine ]",
+ "[ 2/1 → 11/5 | note:c2 s:triangle ]",
+ "[ 11/5 → 12/5 | note:g2 s:bd n:6 ]",
+ "[ 12/5 → 13/5 | note:g2 s:triangle ]",
+ "[ 13/5 → 14/5 | note:d2 s:sine ]",
+ "[ 14/5 → 3/1 | note:f1 s:triangle ]",
+ "[ 3/1 → 16/5 | note:c2 s:sine ]",
+ "[ 16/5 → 17/5 | note:g2 s:bd n:6 ]",
+ "[ 17/5 → 18/5 | note:g2 s:triangle ]",
+ "[ 18/5 → 19/5 | note:d2 s:triangle ]",
+ "[ 19/5 → 4/1 | note:f1 s:sine ]",
+]
+`;
+
exports[`runs examples > example "chooseCycles" example index 0 1`] = `
[
"[ 0/1 → 1/8 | s:bd ]",
@@ -7321,6 +7436,73 @@ exports[`runs examples > example "tri" example index 0 1`] = `
]
`;
+exports[`runs examples > example "undegrade" example index 0 1`] = `
+[
+ "[ 1/8 → 1/4 | s:hh ]",
+ "[ 3/8 → 1/2 | s:hh ]",
+ "[ 1/2 → 5/8 | s:hh ]",
+ "[ 5/8 → 3/4 | s:hh ]",
+ "[ 9/8 → 5/4 | s:hh ]",
+ "[ 5/4 → 11/8 | s:hh ]",
+ "[ 3/2 → 13/8 | s:hh ]",
+ "[ 13/8 → 7/4 | s:hh ]",
+ "[ 7/4 → 15/8 | s:hh ]",
+ "[ 2/1 → 17/8 | s:hh ]",
+ "[ 17/8 → 9/4 | s:hh ]",
+ "[ 19/8 → 5/2 | s:hh ]",
+ "[ 23/8 → 3/1 | s:hh ]",
+ "[ 3/1 → 25/8 | s:hh ]",
+ "[ 13/4 → 27/8 | s:hh ]",
+ "[ 15/4 → 31/8 | s:hh ]",
+ "[ 31/8 → 4/1 | s:hh ]",
+]
+`;
+
+exports[`runs examples > example "undegrade" example index 1 1`] = `
+[
+ "[ 0/1 → 1/10 | s:hh pan:0 ]",
+ "[ 1/10 → 1/5 | s:hh pan:0 ]",
+ "[ 1/5 → 3/10 | s:hh pan:1 ]",
+ "[ 3/10 → 2/5 | s:hh pan:1 ]",
+ "[ 2/5 → 1/2 | s:hh pan:0 ]",
+ "[ 1/2 → 3/5 | s:hh pan:1 ]",
+ "[ 3/5 → 7/10 | s:hh pan:0 ]",
+ "[ 7/10 → 4/5 | s:hh pan:1 ]",
+ "[ 4/5 → 9/10 | s:hh pan:0 ]",
+ "[ 9/10 → 1/1 | s:hh pan:1 ]",
+ "[ 1/1 → 11/10 | s:hh pan:1 ]",
+ "[ 11/10 → 6/5 | s:hh pan:0 ]",
+ "[ 6/5 → 13/10 | s:hh pan:0 ]",
+ "[ 13/10 → 7/5 | s:hh pan:0 ]",
+ "[ 7/5 → 3/2 | s:hh pan:1 ]",
+ "[ 3/2 → 8/5 | s:hh pan:1 ]",
+ "[ 8/5 → 17/10 | s:hh pan:1 ]",
+ "[ 17/10 → 9/5 | s:hh pan:1 ]",
+ "[ 9/5 → 19/10 | s:hh pan:1 ]",
+ "[ 19/10 → 2/1 | s:hh pan:0 ]",
+ "[ 2/1 → 21/10 | s:hh pan:0 ]",
+ "[ 21/10 → 11/5 | s:hh pan:0 ]",
+ "[ 11/5 → 23/10 | s:hh pan:1 ]",
+ "[ 23/10 → 12/5 | s:hh pan:0 ]",
+ "[ 12/5 → 5/2 | s:hh pan:0 ]",
+ "[ 5/2 → 13/5 | s:hh pan:0 ]",
+ "[ 13/5 → 27/10 | s:hh pan:0 ]",
+ "[ 27/10 → 14/5 | s:hh pan:0 ]",
+ "[ 14/5 → 29/10 | s:hh pan:1 ]",
+ "[ 29/10 → 3/1 | s:hh pan:1 ]",
+ "[ 3/1 → 31/10 | s:hh pan:1 ]",
+ "[ 31/10 → 16/5 | s:hh pan:1 ]",
+ "[ 16/5 → 33/10 | s:hh pan:0 ]",
+ "[ 33/10 → 17/5 | s:hh pan:0 ]",
+ "[ 17/5 → 7/2 | s:hh pan:0 ]",
+ "[ 7/2 → 18/5 | s:hh pan:1 ]",
+ "[ 18/5 → 37/10 | s:hh pan:1 ]",
+ "[ 37/10 → 19/5 | s:hh pan:0 ]",
+ "[ 19/5 → 39/10 | s:hh pan:0 ]",
+ "[ 39/10 → 4/1 | s:hh pan:1 ]",
+]
+`;
+
exports[`runs examples > example "undegradeBy" example index 0 1`] = `
[
"[ 1/8 → 1/4 | s:hh ]",
@@ -7352,6 +7534,51 @@ exports[`runs examples > example "undegradeBy" example index 0 1`] = `
]
`;
+exports[`runs examples > example "undegradeBy" example index 1 1`] = `
+[
+ "[ 0/1 → 1/10 | s:hh pan:0 ]",
+ "[ 1/10 → 1/5 | s:hh pan:0 ]",
+ "[ 1/5 → 3/10 | s:hh pan:0 ]",
+ "[ 3/10 → 2/5 | s:hh pan:0 ]",
+ "[ 2/5 → 1/2 | s:hh pan:0 ]",
+ "[ 1/2 → 3/5 | s:hh pan:0 ]",
+ "[ 3/5 → 7/10 | s:hh pan:0 ]",
+ "[ 7/10 → 4/5 | s:hh pan:1 ]",
+ "[ 4/5 → 9/10 | s:hh pan:0 ]",
+ "[ 9/10 → 1/1 | s:hh pan:1 ]",
+ "[ 1/1 → 11/10 | s:hh pan:1 ]",
+ "[ 11/10 → 6/5 | s:hh pan:0 ]",
+ "[ 6/5 → 13/10 | s:hh pan:0 ]",
+ "[ 13/10 → 7/5 | s:hh pan:0 ]",
+ "[ 7/5 → 3/2 | s:hh pan:0 ]",
+ "[ 3/2 → 8/5 | s:hh pan:1 ]",
+ "[ 8/5 → 17/10 | s:hh pan:1 ]",
+ "[ 17/10 → 9/5 | s:hh pan:0 ]",
+ "[ 9/5 → 19/10 | s:hh pan:0 ]",
+ "[ 19/10 → 2/1 | s:hh pan:0 ]",
+ "[ 2/1 → 21/10 | s:hh pan:0 ]",
+ "[ 21/10 → 11/5 | s:hh pan:0 ]",
+ "[ 11/5 → 23/10 | s:hh pan:0 ]",
+ "[ 23/10 → 12/5 | s:hh pan:0 ]",
+ "[ 12/5 → 5/2 | s:hh pan:0 ]",
+ "[ 5/2 → 13/5 | s:hh pan:0 ]",
+ "[ 13/5 → 27/10 | s:hh pan:0 ]",
+ "[ 27/10 → 14/5 | s:hh pan:0 ]",
+ "[ 14/5 → 29/10 | s:hh pan:0 ]",
+ "[ 29/10 → 3/1 | s:hh pan:0 ]",
+ "[ 3/1 → 31/10 | s:hh pan:0 ]",
+ "[ 31/10 → 16/5 | s:hh pan:1 ]",
+ "[ 16/5 → 33/10 | s:hh pan:0 ]",
+ "[ 33/10 → 17/5 | s:hh pan:0 ]",
+ "[ 17/5 → 7/2 | s:hh pan:0 ]",
+ "[ 7/2 → 18/5 | s:hh pan:0 ]",
+ "[ 18/5 → 37/10 | s:hh pan:0 ]",
+ "[ 37/10 → 19/5 | s:hh pan:0 ]",
+ "[ 19/5 → 39/10 | s:hh pan:0 ]",
+ "[ 39/10 → 4/1 | s:hh pan:1 ]",
+]
+`;
+
exports[`runs examples > example "unison" example index 0 1`] = `
[
"[ 0/1 → 1/12 | note:d s:supersaw unison:1 ]",
@@ -7619,6 +7846,68 @@ exports[`runs examples > example "vowel" example index 1 1`] = `
]
`;
+exports[`runs examples > example "wchoose" example index 0 1`] = `
+[
+ "[ 0/1 → 1/5 | note:c2 s:sine ]",
+ "[ 1/5 → 2/5 | note:g2 s:triangle ]",
+ "[ 2/5 → 3/5 | note:g2 s:sine ]",
+ "[ 3/5 → 4/5 | note:d2 s:sine ]",
+ "[ 4/5 → 1/1 | note:f1 s:triangle ]",
+ "[ 1/1 → 6/5 | note:c2 s:triangle ]",
+ "[ 6/5 → 7/5 | note:g2 s:sine ]",
+ "[ 7/5 → 8/5 | note:g2 s:sine ]",
+ "[ 8/5 → 9/5 | note:d2 s:sine ]",
+ "[ 9/5 → 2/1 | note:f1 s:sine ]",
+ "[ 2/1 → 11/5 | note:c2 s:sine ]",
+ "[ 11/5 → 12/5 | note:g2 s:sine ]",
+ "[ 12/5 → 13/5 | note:g2 s:sine ]",
+ "[ 13/5 → 14/5 | note:d2 s:sine ]",
+ "[ 14/5 → 3/1 | note:f1 s:sine ]",
+ "[ 3/1 → 16/5 | note:c2 s:sine ]",
+ "[ 16/5 → 17/5 | note:g2 s:sine ]",
+ "[ 17/5 → 18/5 | note:g2 s:sine ]",
+ "[ 18/5 → 19/5 | note:d2 s:sine ]",
+ "[ 19/5 → 4/1 | note:f1 s:sine ]",
+]
+`;
+
+exports[`runs examples > example "wchooseCycles" example index 0 1`] = `
+[
+ "[ 0/1 → 1/8 | s:bd ]",
+ "[ 1/8 → 1/4 | s:bd ]",
+ "[ 1/4 → 3/8 | s:bd ]",
+ "[ 3/8 → 1/2 | s:bd ]",
+ "[ 1/2 → 5/8 | s:bd ]",
+ "[ 5/8 → 3/4 | s:bd ]",
+ "[ 3/4 → 7/8 | s:bd ]",
+ "[ 7/8 → 1/1 | s:bd ]",
+ "[ 1/1 → 9/8 | s:bd ]",
+ "[ 9/8 → 5/4 | s:bd ]",
+ "[ 5/4 → 11/8 | s:bd ]",
+ "[ 11/8 → 3/2 | s:bd ]",
+ "[ 3/2 → 13/8 | s:bd ]",
+ "[ 13/8 → 7/4 | s:bd ]",
+ "[ 7/4 → 15/8 | s:bd ]",
+ "[ 15/8 → 2/1 | s:bd ]",
+ "[ 2/1 → 17/8 | s:bd ]",
+ "[ 17/8 → 9/4 | s:bd ]",
+ "[ 9/4 → 19/8 | s:bd ]",
+ "[ 19/8 → 5/2 | s:bd ]",
+ "[ 5/2 → 21/8 | s:bd ]",
+ "[ 21/8 → 11/4 | s:bd ]",
+ "[ 11/4 → 23/8 | s:bd ]",
+ "[ 23/8 → 3/1 | s:bd ]",
+ "[ 3/1 → 25/8 | s:bd ]",
+ "[ 25/8 → 13/4 | s:bd ]",
+ "[ 13/4 → 27/8 | s:bd ]",
+ "[ 27/8 → 7/2 | s:bd ]",
+ "[ 7/2 → 29/8 | s:bd ]",
+ "[ 29/8 → 15/4 | s:bd ]",
+ "[ 15/4 → 31/8 | s:bd ]",
+ "[ 31/8 → 4/1 | s:bd ]",
+]
+`;
+
exports[`runs examples > example "when" example index 0 1`] = `
[
"[ 0/1 → 1/3 | note:c3 ]",
diff --git a/undocumented.json b/undocumented.json
index 0179340e..63f5d36b 100644
--- a/undocumented.json
+++ b/undocumented.json
@@ -380,6 +380,7 @@
"bjork",
"euclidrot"
],
+ "/packages/core/zyklus.mjs": [],
"/packages/core/signal.mjs": [
"steady",
"signal",
@@ -392,18 +393,14 @@
"tri2",
"time",
"_brandBy",
- "brandBy",
- "brand",
"_irand",
"pickSqueeze",
"pickmodSqueeze",
"__chooseWith",
"randcat",
- "wchoose",
- "wchooseCycles",
+ "wrandcat",
"perlinWith",
- "degradeByWith",
- "undegrade"
+ "degradeByWith"
],
"/packages/core/speak.mjs": [
"speak"
@@ -415,7 +412,6 @@
"/packages/core/neocyclist.mjs": [
"NeoCyclist"
],
- "/packages/core/zyklus.mjs": [],
"/packages/core/cyclist.mjs": [
"Cyclist"
],
diff --git a/website/src/config.ts b/website/src/config.ts
index 012a6542..9dee2aac 100644
--- a/website/src/config.ts
+++ b/website/src/config.ts
@@ -90,6 +90,7 @@ export const SIDEBAR: Sidebar = {
{ text: 'Time Modifiers', link: 'learn/time-modifiers' },
{ text: 'Control Parameters', link: 'functions/value-modifiers' },
{ text: 'Signals', link: 'learn/signals' },
+ { text: 'Random Modifiers', link: 'learn/random-modifiers' },
{ text: 'Conditional Modifiers', link: 'learn/conditional-modifiers' },
{ text: 'Accumulation', link: 'learn/accumulation' },
{ text: 'Tonal Functions', link: 'learn/tonal' },
diff --git a/website/src/pages/learn/conditional-modifiers.mdx b/website/src/pages/learn/conditional-modifiers.mdx
index d9b3426d..c2e22595 100644
--- a/website/src/pages/learn/conditional-modifiers.mdx
+++ b/website/src/pages/learn/conditional-modifiers.mdx
@@ -68,6 +68,42 @@ import { JsDoc } from '../../docs/JsDoc';
+## pickmod
+
+
+
+## pickF
+
+
+
+## pickmodF
+
+
+
+## pickRestart
+
+
+
+## pickmodRestart
+
+
+
+## pickReset
+
+
+
+## pickmodReset
+
+
+
+## inhabit
+
+
+
+## inhabitmod
+
+
+
## squeeze
diff --git a/website/src/pages/learn/random-modifiers.mdx b/website/src/pages/learn/random-modifiers.mdx
new file mode 100644
index 00000000..7633ec69
--- /dev/null
+++ b/website/src/pages/learn/random-modifiers.mdx
@@ -0,0 +1,85 @@
+---
+title: Random Modifiers
+layout: ../../layouts/MainLayout.astro
+---
+
+import { MiniRepl } from '../../docs/MiniRepl';
+import { JsDoc } from '../../docs/JsDoc';
+
+# Random Modifiers
+
+These methods add random behavior to your Patterns.
+
+## choose
+
+
+
+## wchoose
+
+
+
+## chooseCycles
+
+
+
+## wchooseCycles
+
+
+
+## degradeBy
+
+
+
+## degrade
+
+
+
+## undegradeBy
+
+
+
+## undegrade
+
+
+
+## sometimesBy
+
+
+
+## sometimes
+
+
+
+## someCyclesBy
+
+
+
+## someCycles
+
+
+
+## often
+
+
+
+## rarely
+
+
+
+## almostNever
+
+
+
+## almostAlways
+
+
+
+## never
+
+
+
+## always
+
+
+
+Next up: [Conditional Modifiers](/learn/conditional-modifiers)
diff --git a/website/src/pages/learn/signals.mdx b/website/src/pages/learn/signals.mdx
index ae64d812..7c9d69df 100644
--- a/website/src/pages/learn/signals.mdx
+++ b/website/src/pages/learn/signals.mdx
@@ -31,14 +31,14 @@ They can provide streams of numbers that can be sampled at discrete points in ti
-## Ranges from -1 to 1
-
-There is also `saw2`, `sine2`, `cosine2`, `tri2` and `square2` which have a range from -1 to 1!
-
## rand
+## Ranges from -1 to 1
+
+There is also `saw2`, `sine2`, `cosine2`, `tri2`, `square2` and `rand2` which have a range from -1 to 1!
+
## perlin
@@ -47,64 +47,12 @@ There is also `saw2`, `sine2`, `cosine2`, `tri2` and `square2` which have a rang
-# Random Modifiers
+## brand
-These methods add random behavior to your Patterns.
+
-## chooseCycles
+## brandBy
-
+
-## degradeBy
-
-
-
-## degrade
-
-
-
-## undegradeBy
-
-
-
-## sometimesBy
-
-
-
-## sometimes
-
-
-
-## someCyclesBy
-
-
-
-## someCycles
-
-
-
-## often
-
-
-
-## rarely
-
-
-
-## almostNever
-
-
-
-## almostAlways
-
-
-
-## never
-
-
-
-## always
-
-
-
-Next up: [Conditional Modifiers](/learn/conditional-modifiers)
+Next up: [Random Modifiers](/learn/random-modifiers)