tur/structural

stdlib/structural.tur
defn

seq

(seq [& patterns])

sequence patterns end to end, each getting equal time per cycle.

patternsone or more patterns to sequence
Pattern<T> cycling through patterns one beat at a time.

  ((seq pat-a pat-b pat-c) 1.5)  ; evaluates pat-b at sub-time 0.5
defn

seq-n

(seq-n [& pattern-lengths])

sequence patterns with custom durations per segment.

pattern-lengthslist of [pattern length] tuples

Pattern<T> proportionally allocating time to each segment.

defn

stack

(stack [& patterns])

evaluate all patterns simultaneously and return their values as a vector.

patternsone or more patterns to stack
Pattern<vec<T>> where each element is one pattern's value at the current time.

  ((stack kick-pat snare-pat hat-pat) 0.0)
defn

stack-with

(stack-with [f & patterns])

stack patterns and fold results with a combiner function.

ffunction vec<T> -> U combining all pattern values
patternspatterns to stack

Pattern<U>.

defn

sum

(sum [& patterns])

pointwise sum of numeric patterns.

patternsone or more NumPattern to sum
NumPattern returning the sum of all pattern values.

  ((sum bass-pat melody-pat) 0.5)
defn

multiply

(multiply [& patterns])

pointwise product of numeric patterns.

patternsone or more NumPattern to multiply

NumPattern returning the product of all pattern values.

defn

average

(average [& patterns])

pointwise average of numeric patterns.

patternsone or more NumPattern to average

NumPattern returning the arithmetic mean of all pattern values.

defn

when

(when [cond p & [zero 0])

gate a pattern through a boolean condition.

condBoolPattern controlling when p fires
ppattern to gate
zerovalue when condition is false (default: 0)
Pattern<T>.

  (when (pattern/every-n 2) kick-pat 0)
defn

if-pat

(if-pat [cond then-p else-p])

select between two patterns based on a boolean pattern.

condBoolPattern
then-ppattern when condition is true
else-ppattern when condition is false

Pattern<T>.

defn

every

(every [n p & [zero 0])

trigger a pattern every n beats.

nbeat interval
ppattern to trigger
zerovalue between triggers (default: 0)
Pattern<T>.

  (every 4 fill-pat)
defn

nth

(nth [n p & [offset 0 zero 0])

trigger a pattern when beat number mod n equals offset.

nmodulo base
ppattern to trigger
offsettarget remainder (default: 0)
zerovalue when not triggered (default: 0)

Pattern<T>.

defn

euclid

(euclid [steps hits & [rotation 0])

Euclidean rhythm distributing hits as evenly as possible.

stepstotal number of steps in the pattern
hitsnumber of active (hit) steps
rotationrotation offset (default: 0)
NumPattern returning 1 for hits and 0 for rests.

  ((euclid 8 5) 0.0)  ; classic 5-in-8 Euclidean rhythm
defn

euclid-vals

(euclid-vals [steps hits & [on-value 1 off-value 0 rotation 0])

Euclidean rhythm with custom on/off values.

stepstotal steps
hitsnumber of hit steps
on-valuevalue for hits (default: 1)
off-valuevalue for rests (default: 0)
rotationrotation offset (default: 0)

Pattern<T> with custom on/off values.

defn

select

(select [index & patterns])

choose among patterns using an index pattern.

indexNumPattern producing indices into the pattern list
patternspatterns to select from
Pattern<T> delegating to the selected sub-pattern.

  ((select (cycle 0 1 2) pat-a pat-b pat-c) 0.5)
defn

first-nonzero

(first-nonzero [& [zero 0 patterns])

return the first non-zero value from a set of patterns.

zerozero sentinel value (default: 0)
patternspatterns to check in order

Pattern<T> returning the first non-zero pattern value.

defn

index

(index [& [cycle-length 1])

return the step index within a cycle.

cycle-lengthnumber of steps per cycle (default: 1)

IntPattern returning the current step index.

defn

first-beat

(first-beat [& [cycle-length 1])

true on the first step of each cycle.

cycle-lengthsteps per cycle (default: 1)

BoolPattern.

defn

last-beat

(last-beat [& [cycle-length 1])

true on the last step of each cycle.

cycle-lengthsteps per cycle (default: 1)

BoolPattern.

defn

chain

(chain [& [sentinel nil patterns])

concatenate patterns, advancing when a sentinel value is returned.

sentinelvalue indicating end of a pattern segment (default: nil)
patternspatterns to chain

Pattern<T> advancing through patterns in order.

defn

interleave

(interleave [& patterns])

alternate between patterns each beat.

patternspatterns to interleave
Pattern<T> cycling through patterns one per beat, with each sub-pattern
  receiving compressed time equal to the number of patterns.

  ((interleave pat-a pat-b) 0.5)  ; reads pat-a at time 1.0
defn

interleave-n

(interleave-n [& pattern-lengths])

interleave patterns with custom durations (alias for seq-n).

pattern-lengthslist of [pattern length] tuples

Pattern<T>.

defn

mask

(mask [source mask & [zero 0])

let signal pass only where a boolean mask is true.

sourcePattern to read values from
maskBoolPattern: true = pass, false = block
zerovalue when masked (default: 0)
Pattern<T>.

  (mask melody-pat (euclid 8 5))
defn

invert

(invert [p])

invert a boolean pattern.

pBoolPattern to invert

BoolPattern with negated values.

defn

and-pat

(and-pat [a b])

logical AND of two boolean patterns.

afirst BoolPattern
bsecond BoolPattern

BoolPattern.

defn

or-pat

(or-pat [a b])

logical OR of two boolean patterns.

afirst BoolPattern
bsecond BoolPattern

BoolPattern.

defn

xor-pat

(xor-pat [a b])

logical XOR of two boolean patterns.

afirst BoolPattern
bsecond BoolPattern

BoolPattern.

defn

group

(group [group-size group-pattern & patterns])

partition patterns into groups and apply a group combiner.

group-sizenumber of patterns per group
group-patternfunction (time, patterns) -> T applied to each group
patternspatterns to group

Pattern<T> applying group-pattern to the current group.