diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index 99f038e2..e4745368 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -2929,7 +2929,8 @@ export const splice = register( ); export const { loopAt, loopat } = register(['loopAt', 'loopat'], function (factor, pat) { - return new Pattern((state) => _loopAt(factor, pat, state.controls._cps).query(state)); + const tactus = pat.tactus ? pat.tactus.div(factor) : undefined; + return new Pattern((state) => _loopAt(factor, pat, state.controls._cps).query(state), tactus); }); /** diff --git a/packages/core/test/pattern.test.mjs b/packages/core/test/pattern.test.mjs index 8c5a54ff..31ec4868 100644 --- a/packages/core/test/pattern.test.mjs +++ b/packages/core/test/pattern.test.mjs @@ -1248,4 +1248,9 @@ describe('Pattern', () => { ); }); }); + describe('loopAt', () => { + it('maintains tactus', () => { + expect(s('bev').chop(8).loopAt(2).tactus).toStrictEqual(Fraction(4)); + }); + }); });