mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-11 21:58:31 +00:00
timeCat seems to work
This commit is contained in:
parent
f5fb5857df
commit
5b8c34e504
15
strudel.mjs
15
strudel.mjs
@ -456,7 +456,6 @@ class Pattern {
|
||||
return this._fastGap(Fraction(1).div(e.sub(b)))._late(b)
|
||||
}
|
||||
|
||||
|
||||
_fast(factor) {
|
||||
const fastQuery = this.withQueryTime(t => t.mul(factor))
|
||||
return fastQuery.withEventTime(t => t.div(factor))
|
||||
@ -604,6 +603,18 @@ function cat(...pats) {
|
||||
return fastcat(...pats)
|
||||
}
|
||||
|
||||
function timeCat(...timepats) {
|
||||
const total = timepats.map(a => a[0]).reduce((a,b) => a.add(b), Fraction(0))
|
||||
let begin = Fraction(0)
|
||||
const pats = []
|
||||
for (const [time, pat] of timepats) {
|
||||
const end = begin.add(time)
|
||||
pats.push(reify(pat)._compressSpan(new TimeSpan(begin.div(total), end.div(total))))
|
||||
begin = end
|
||||
}
|
||||
return stack(...pats)
|
||||
}
|
||||
|
||||
function _sequenceCount(x) {
|
||||
if(Array.isArray(x)) {
|
||||
if (x.length == 0) {
|
||||
@ -670,7 +681,7 @@ const late = curry((a, pat) => pat.late(a))
|
||||
const rev = pat => pat.rev()
|
||||
|
||||
export {Fraction, TimeSpan, Hap, Pattern,
|
||||
pure, stack, slowcat, fastcat, cat, sequence, polymeter, pm, polyrhythm, pr, reify, silence,
|
||||
pure, stack, slowcat, fastcat, cat, timeCat, sequence, polymeter, pm, polyrhythm, pr, reify, silence,
|
||||
fast, slow, early, late, rev
|
||||
}
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ import Fraction from 'fraction.js'
|
||||
|
||||
import { strict as assert } from 'assert';
|
||||
|
||||
import {TimeSpan, Hap, Pattern, pure, stack, fastcat, slowcat, cat, sequence, polyrhythm, silence, fast} from "../strudel.mjs";
|
||||
import {TimeSpan, Hap, Pattern, pure, stack, fastcat, slowcat, cat, sequence, polyrhythm, silence, fast, timeCat} from "../strudel.mjs";
|
||||
//import { Time } from 'tone';
|
||||
import pkg from 'tone';
|
||||
const { Time } = pkg;
|
||||
@ -224,4 +224,12 @@ describe('Pattern', function() {
|
||||
)
|
||||
})
|
||||
})
|
||||
describe('timeCat()', function() {
|
||||
it('Can concatenate patterns with different relative durations', function() {
|
||||
assert.deepStrictEqual(
|
||||
sequence("a", ["a", "a"]).firstCycle,
|
||||
timeCat([1,"a"], [0.5, "a"], [0.5, "a"]).firstCycle
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user