❮❮ ❯❯  00:00:00:00
LEGEND   PersonSuitcaseTrainBicycle
CHAPTERS  (click to expand)
BOOKMARKS  (click to expand)
WORKSHOP GUIDANCE
  • The transpose() function shifts all pitches in a range so the first pitch matches that specified:

    transpose(@Array, D-4)

    For example, if @Array contained a C Major triad (C-E-G), it would become D Major (D-F#-A)
  • For an equal chance of incrementing, decre-menting, or retaining the same pitch, we generate a random number with 3 possible outcomes (-1, 0, 1) using the rnd() function:

    rnd(-1,1)

  • In Manhattan, conditional statements (if-then-else) also support probablistic conditions. Whilst 0.0 is false (0% chance) and 1.0 is true (100% chance), conditions that evaluate to values in-between will treat that as a probability:

    0.5 ? X : Y  -  half a chance of X, else Y
    1/10 ? X  -  X will happen 1 time in 10
    1/3 ? X : 1/2 ? Y : Z  -  three-way split

  • The group() function references the nth group of cells (separated by empty cells) in a range:

    copy(group(1, @Things), @Thing)

    This code selects the first group of cells in @Things and copies it to the @Thing array. The function is useful for concisely listing and selecting from (or iterating through) chord sequences.
SOLUTIONS  (click to reveal)
▸ Root of the problem

copy(@Persons, @Notes)
@Notes = f(".pitch = C-4 + .pitch / 3")
@Notes = f(".volume = (@Persons +.volume) * 0.7")

transpose(@Chord, @Root.pitch)

constrain(@Notes, @Chord, 1)

▸ Stepwise Motion

copy(@Persons, @Notes)
@Notes = f(".pitch = C-4 + .pitch / 3")
@Notes = f(".volume = (@Persons +.volume) * 0.7")

0.25 ? @Root.pitch = @Root.pitch + rnd(-1,1)
transpose(@Chord, @Root.pitch)

constrain(@Notes, @Chord, 1)

▸ Variable Quality

copy(@Persons, @Notes)
@Notes = f(".pitch = C-4 + .pitch / 3")
@Notes = f(".volume = (@Persons +.volume) * 0.7")

copy(group(rnd(1,4),@Chords), @Chord)
0.25 ? @Root.pitch = @Root.pitch + rnd(-1,1)
transpose(@Chord, @Root.pitch)

constrain(@Notes, @Chord, 1)