diff --git a/index.html b/index.html deleted file mode 100644 index fa8d6105..00000000 --- a/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - Bingo - - - - - - - - diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 9bf45725..6f405b48 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -463,7 +463,7 @@ export class Pattern { } _compress(b, e) { - if (b > e || b > 1 || e > 1 || b < 0 || e < 0) { + if (b.gt(e) || b.gt(1) || e.gt(1) || b.lt(0) || e.lt(0)) { return silence; } return this._fastGap(Fraction(1).div(e.sub(b)))._late(b); @@ -495,6 +495,13 @@ export class Pattern { return this._squeezeBind(func); } + _striate(n) { + const slices = Array.from({ length: n }, (x, i) => i); + const slice_objects = slices.map((i) => ({ begin: i / n, end: (i + 1) / n })); + const slicePat = slowcat(...slice_objects); + return this.union(slicePat)._fast(n); + } + // cpm = cycles per minute _cpm(cpm) { return this._fast(cpm / 60); @@ -774,6 +781,7 @@ Pattern.prototype.patternified = [ 'linger', 'ply', 'segment', + 'striate', 'slow', 'velocity', ]; diff --git a/packages/core/test/pattern.test.mjs b/packages/core/test/pattern.test.mjs index fd9163b0..641f81e4 100644 --- a/packages/core/test/pattern.test.mjs +++ b/packages/core/test/pattern.test.mjs @@ -704,6 +704,10 @@ describe('Pattern', function () { sequence(pure('a').fast(3), [pure('b').fast(3), pure('c').fast(3)]).firstCycle(), ); }); + it('Doesnt drop events in the 9th cycle', () => { + // fixed with https://github.com/tidalcycles/strudel/commit/72eeaf446e3d5e186d63cc0d2276f0723cde017a + assert.equal(sequence(1, 2, 3).ply(2).early(8).firstCycle().length, 6); + }); }); describe('chop', () => { it('Can _chop(2)', () => { diff --git a/packages/core/timespan.mjs b/packages/core/timespan.mjs index 97ab74f1..5c398da1 100644 --- a/packages/core/timespan.mjs +++ b/packages/core/timespan.mjs @@ -33,7 +33,7 @@ export class TimeSpan { // (Note that the output timespan probably does not start *at* Time 0 -- // that only happens when the input Arc starts at an integral Time.) const b = this.begin.cyclePos(); - const e = b + (this.end - this.begin); + const e = b.add(this.end.sub(this.begin)); return new TimeSpan(b, e); } diff --git a/repl/src/tunes.mjs b/repl/src/tunes.mjs index fbb4b0aa..23693556 100644 --- a/repl/src/tunes.mjs +++ b/repl/src/tunes.mjs @@ -734,8 +734,8 @@ const bass = await sampler({ bell = bell.chain(vol(0.6).connect(delay),out()); "0".euclidLegato(3,8) + .echo(3, 1/16, .5) .add(rand.range(0,12)) - .echo(3, 1/16, (x,n)=>x.add((n+1)*2).velocity(1/(n+1))) .velocity(rand.range(.5,1)) .legato(rand.range(.4,3)) .scale(slowcat('D minor pentatonic')).tone(bell) @@ -808,3 +808,19 @@ stack( //.pianoroll({minMidi:20, maxMidi:160}) // strudel disable-highlighting`; + +export const festivalOfFingers3 = `"[-7*3],0,2,6,[8 7]" +.echoWith(4,1/4, (x,n)=>x + .add(n*7) + .velocity(1/(n+1)) + .legato(1/(n+1))) +.velocity(perlin.range(.5,.9).slow(8)) +.stack("[22 25]*3" + .legato(sine.range(.5,2).slow(8)) + .velocity(sine.range(.4,.8).slow(5)) + .echo(4,1/12,.5)) +.scale(slowcat('D dorian','G mixolydian','C dorian','F mixolydian')) +.legato(1) +.slow(2) +.tone((await piano()).toDestination()) +//.pianoroll({maxMidi:160})`; diff --git a/snowpack.config.js b/snowpack.config.js deleted file mode 100644 index 266476d8..00000000 --- a/snowpack.config.js +++ /dev/null @@ -1,21 +0,0 @@ -// Snowpack Configuration File -// See all supported options: https://www.snowpack.dev/reference/configuration - -/** @type {import("snowpack").SnowpackUserConfig } */ -module.exports = { - mount: { - /* ... */ - }, - plugins: [ - /* ... */ - ], - packageOptions: { - /* ... */ - }, - devOptions: { - /* ... */ - }, - buildOptions: { - /* ... */ - }, -};