mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-25 04:28:30 +00:00
Working squeezeBind
This commit is contained in:
parent
357b0ee467
commit
c2cc6b6dc8
@ -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
|
||||||
|
|||||||
@ -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()
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user