diff --git a/packages/core/signal.mjs b/packages/core/signal.mjs index 353ce25bf..4398e2ab7 100644 --- a/packages/core/signal.mjs +++ b/packages/core/signal.mjs @@ -389,7 +389,9 @@ export const randL = (n) => { export const randrun = (n) => { return signal((t, controls) => { // Without adding 0.5, the first cycle is always 0,1,2,3,... - const rands = getRandsAtTime(t.floor().add(0.5), n, controls.randSeed); + let rands = getRandsAtTime(t.floor().add(0.5), n, controls.randSeed); + // Support n = 1 + if (!Array.isArray(rands)) rands = [rands]; const nums = rands .map((n, i) => [n, i]) .sort((a, b) => (a[0] > b[0]) - (a[0] < b[0])) diff --git a/packages/core/test/signal.test.mjs b/packages/core/test/signal.test.mjs index b02f8a08b..26c1d656a 100644 --- a/packages/core/test/signal.test.mjs +++ b/packages/core/test/signal.test.mjs @@ -9,7 +9,7 @@ import Fraction from 'fraction.js'; import { describe, it, expect, vi } from 'vitest'; import { saw, saw2, isaw, isaw2, per, perx, cyclesPer } from '../signal.mjs'; -import { fastcat, sequence, State, TimeSpan, Hap } from '../index.mjs'; +import { fastcat, sequence, State, TimeSpan, Hap, note } from '../index.mjs'; const st = (begin, end) => new State(ts(begin, end)); const ts = (begin, end) => new TimeSpan(Fraction(begin), Fraction(end)); @@ -59,3 +59,9 @@ describe('perx', () => { ); }); }); + +describe('shuffle', () => { + it('returns original pattern if input is 1', () => { + expect(note('c d e f').sound('piano').shuffle(1).firstCycle()).toEqual(note('c d e f').sound('piano').firstCycle()); + }); +});