mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-11 13:48:34 +00:00
attempt at fixing #216
This commit is contained in:
parent
cc54da5980
commit
dfdd918ea0
@ -645,12 +645,15 @@ export class Pattern {
|
|||||||
return this._trigJoin(true);
|
return this._trigJoin(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Like the other joins above, joins a pattern of patterns of values, into a flatter
|
||||||
|
// pattern of values. In this case it takes whole cycles of the inner pattern to fit each event
|
||||||
|
// in the outer pattern.
|
||||||
_squeezeJoin() {
|
_squeezeJoin() {
|
||||||
const pat_of_pats = this;
|
const pat_of_pats = this;
|
||||||
function query(state) {
|
function query(state) {
|
||||||
const haps = pat_of_pats.discreteOnly().query(state);
|
const haps = pat_of_pats.discreteOnly().query(state);
|
||||||
function flatHap(outerHap) {
|
function flatHap(outerHap) {
|
||||||
const pat = outerHap.value._compressSpan(outerHap.wholeOrPart().cycleArc());
|
const pat = outerHap.value._focusSpan(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;
|
||||||
@ -735,6 +738,7 @@ export class Pattern {
|
|||||||
return this.withQuerySpan(qf).withHapSpan(ef)._splitQueries();
|
return this.withQuerySpan(qf).withHapSpan(ef)._splitQueries();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compress each cycle into the given timespan, leaving a gap
|
||||||
_compress(b, e) {
|
_compress(b, e) {
|
||||||
if (b.gt(e) || b.gt(1) || e.gt(1) || b.lt(0) || e.lt(0)) {
|
if (b.gt(e) || b.gt(1) || e.gt(1) || b.lt(0) || e.lt(0)) {
|
||||||
return silence;
|
return silence;
|
||||||
@ -746,6 +750,17 @@ export class Pattern {
|
|||||||
return this._compress(span.begin, span.end);
|
return this._compress(span.begin, span.end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Similar to compress, but doesn't leave gaps, and the 'focus' can be
|
||||||
|
// bigger than a cycle
|
||||||
|
_focus(b, e) {
|
||||||
|
const factor = Fraction(1).div(e.sub(b));
|
||||||
|
return this._fast(factor).late(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
_focusSpan(span) {
|
||||||
|
return this._focus(span.begin, span.end);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Speed up a pattern by the given factor. Used by "*" in mini notation.
|
* Speed up a pattern by the given factor. Used by "*" in mini notation.
|
||||||
*
|
*
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user