diff --git a/strudel.mjs b/strudel.mjs index fbd4f5d0..fbffa443 100644 --- a/strudel.mjs +++ b/strudel.mjs @@ -73,7 +73,7 @@ Fraction.prototype.min = function(other) { } Fraction.prototype.show = function () { - return this.n + "/" + this.d + return (this.s * this.n) + "/" + this.d } Fraction.prototype.or = function(other) { @@ -574,7 +574,7 @@ class Pattern { } off(time_pat, func) { - return stack([this, func(this._early(time_pat))]) + return stack(this, func(this.late(time_pat))) } every(n, func) { diff --git a/test/pattern.test.mjs b/test/pattern.test.mjs index 70e49974..7b3fe820 100644 --- a/test/pattern.test.mjs +++ b/test/pattern.test.mjs @@ -355,4 +355,26 @@ describe('Pattern', function() { ) }) }) + describe("early", () => { + it("Can shift an event earlier", () => { + assert.deepStrictEqual( + pure(30)._late(0.25).query(ts(1,2)), + [hap(ts(1/4,5/4), ts(1,5/4), 30), hap(ts(5/4,9/4), ts(5/4,2), 30)] + ) + }) + it("Can shift an event earlier, into negative time", () => { + assert.deepStrictEqual( + pure(30)._late(0.25).query(ts(0,1)), + [hap(ts(-3/4,1/4), ts(0,1/4), 30), hap(ts(1/4,5/4), ts(1/4,1), 30)] + ) + }) + }) + describe("off", () => { + it("Can offset a transformed pattern from the original", () => { + assert.deepStrictEqual( + pure(30).off(0.25, add(2)).firstCycle, + stack(pure(30), pure(30).early(0.25).add(2)).firstCycle + ) + }) + }) })