From 939bc643be7f442847e409d54a9bb3b977f79674 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 15 Apr 2022 22:41:39 +0100 Subject: [PATCH 1/6] rangex --- packages/core/pattern.mjs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 7e82ec44..9f3f72be 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -311,6 +311,11 @@ export class Pattern { return this.mul(max - min).add(min); } + rangex(min, max) { + return this.range(Math.log(min), Math.log(max)).fmap(Math.exp); + } + + // Assumes source pattern of numbers in range -1..1 range2(min, max) { return this._fromBipolar().range(min, max); From 8fda84c15ace33e4b28ecda6060dc6311cafcbb7 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 15 Apr 2022 22:42:03 +0100 Subject: [PATCH 2/6] palindrome --- packages/core/pattern.mjs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 9f3f72be..a8c44b39 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -313,8 +313,7 @@ export class Pattern { rangex(min, max) { return this.range(Math.log(min), Math.log(max)).fmap(Math.exp); - } - + } // Assumes source pattern of numbers in range -1..1 range2(min, max) { @@ -616,6 +615,10 @@ export class Pattern { return new Pattern(query)._splitQueries(); } + palindrome() { + this.every(2, rev); + } + juxBy(by, func) { by /= 2; const elem_or = function (dict, key, dflt) { From 544e32e0f8876bd7de514dc5ec6d35fdb401b044 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 16 Apr 2022 10:02:35 +0100 Subject: [PATCH 3/6] add 'constant' --- packages/core/util.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/util.mjs b/packages/core/util.mjs index 2de7a8e6..5ec88125 100644 --- a/packages/core/util.mjs +++ b/packages/core/util.mjs @@ -60,6 +60,7 @@ export const removeUndefineds = (xs) => xs.filter((x) => x != undefined); export const flatten = (arr) => [].concat(...arr); export const id = (a) => a; +export const constant = (a, b) => a; export const listRange = (min, max) => Array.from({ length: max - min + 1 }, (_, i) => i + min); From f1ac9c44433a52047d878a9e6638082a2bfe61e6 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 16 Apr 2022 10:03:00 +0100 Subject: [PATCH 4/6] perlin noise --- packages/core/signal.mjs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/core/signal.mjs b/packages/core/signal.mjs index fd924cbc..a2f0e4e4 100644 --- a/packages/core/signal.mjs +++ b/packages/core/signal.mjs @@ -1,6 +1,7 @@ import { Hap } from './hap.mjs'; import { Pattern, fastcat, reify, silence } from './pattern.mjs'; import Fraction from './fraction.mjs'; +import { id } from './util.mjs'; export function steady(value) { // A continuous value @@ -29,6 +30,8 @@ export const square2 = square._toBipolar(); export const tri = fastcat(isaw, saw); export const tri2 = fastcat(isaw2, saw2); +export const time = signal(id); + // random signals const xorwise = (x) => { @@ -75,3 +78,13 @@ export const chooseWith = (pat, xs) => { }; export const choose = (...xs) => chooseWith(rand, xs); + +export const perlinWith = (pat) => { + const pata = pat.fmap(Math.floor); + const patb = pat.fmap((t) => Math.floor(t) + 1); + const smootherStep = (x) => 6.0 * x ** 5 - 15.0 * x ** 4 + 10.0 * x ** 3; + const interp = (x) => (a) => (b) => a + smootherStep(x) * (b - a); + return pat.sub(pata).fmap(interp).appBoth(pata.fmap(timeToRand)).appBoth(patb.fmap(timeToRand)); +}; + +export const perlin = perlinWith(time); From 031b93f06230ea97b612b5f951e4866cc64ae912 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 16 Apr 2022 10:09:47 +0100 Subject: [PATCH 5/6] fix palindrome --- packages/core/pattern.mjs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index a8c44b39..834e1996 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -496,6 +496,10 @@ export class Pattern { return this._squeezeBind(func); } + _striate(n) { + + } + // cpm = cycles per minute _cpm(cpm) { return this._fast(cpm / 60); @@ -616,7 +620,7 @@ export class Pattern { } palindrome() { - this.every(2, rev); + return this.every(2, rev); } juxBy(by, func) { From c88508ace3c55f34ea0aaaa41910293c27330023 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 16 Apr 2022 10:12:01 +0100 Subject: [PATCH 6/6] tidy --- packages/core/pattern.mjs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 834e1996..381bef06 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -496,10 +496,6 @@ export class Pattern { return this._squeezeBind(func); } - _striate(n) { - - } - // cpm = cycles per minute _cpm(cpm) { return this._fast(cpm / 60);