Working squeezeBind

This commit is contained in:
alex 2022-04-12 11:22:53 +01:00
parent 357b0ee467
commit c2cc6b6dc8
2 changed files with 17 additions and 6 deletions

View File

@ -588,7 +588,7 @@ class Pattern {
function query(state) { function query(state) {
const haps = pat_of_pats.query(state); const haps = pat_of_pats.query(state);
function flatHap(outerHap) { function flatHap(outerHap) {
const pat = outerHap.value.compressArc(outerHap.wholeOrPart().cycleArc()); const pat = outerHap.value._compressSpan(outerHap.wholeOrPart().cycleArc());
const innerHaps = pat.query(state.setSpan(outerHap.part)); const innerHaps = pat.query(state.setSpan(outerHap.part));
function munge(outer, inner) { function munge(outer, inner) {
let whole = undefined; let whole = undefined;
@ -599,19 +599,21 @@ class Pattern {
return undefined; return undefined;
} }
} }
const part = inner.part.intersection(outer_part); const part = inner.part.intersection(outer.part);
if (!part) { if (!part) {
// The parts don't intersect // The parts don't intersect
return undefined; return undefined;
} }
const context = inner.combineContext(outer.context); const context = inner.combineContext(outer);
return new Hap(whole, part, inner.value, context); return new Hap(whole, part, inner.value, context);
} }
innerHaps.map(innerHap => munge(outerHap,innerHap)) return innerHaps.map(innerHap => munge(outerHap, innerHap))
} }
const flattened = haps.map((x) => x.withEvent(flatHap)); const result = flatten(haps.map(flatHap));
return flattened.filter(x => x); // remove undefineds
return result.filter(x => x);
} }
return new Pattern(query);
} }
// squeezeJoin :: Pattern (Pattern a) -> Pattern a // squeezeJoin :: Pattern (Pattern a) -> Pattern a

View File

@ -33,6 +33,7 @@ import {
square2, square2,
tri, tri,
tri2, tri2,
id,
} from '../strudel.mjs'; } from '../strudel.mjs';
//import { Time } from 'tone'; //import { Time } from 'tone';
import pkg from 'tone'; import pkg from 'tone';
@ -489,4 +490,12 @@ describe('Pattern', function() {
) )
}) })
}) })
describe("squeezeJoin", () => {
it("Can squeeze", () => {
assert.deepStrictEqual(
sequence("a", ["a","a"]).fmap(a => fastcat("b", "c")).squeezeJoin().firstCycle(),
sequence(["b", "c"],[["b", "c"],["b", "c"]]).firstCycle()
)
})
})
}) })