Source Code | Tickets | Trello | Twitter | Patreon | © Michael DeHaan, 2020

Transforms


Transforms

Transforms are kind of like Patterns that move across patterns and stomp over them. Like Patterns, they are composed of exactly the same Slots.

While many sequencers have arpeggiators, in Warp, transforms are building blocks that can build arpeggiators, or also generalized MIDI effects, like octave shifting a whole pattern, or every third note. They are limited only by what Slots can do.



Creating A Transform 

This is a basic arpeggiator that strums chords - it works regardless of the number of notes in a Chord:


api.transforms.add(name='arp1', divide=None, slots=[
    Slot(),
])

This MIDI effect octave shifts every other note:


api.transforms.add(name='fx1', divide=1, slots=[
    Slot(octave_shift=1),
    Slot(),
])

This is a two octave arp for triads:


api.transforms.add(name='arp2', divide=6, applies_to='chords', slots=[
    Slot(),
    Slot(),
    Slot(),
    Slot(octave_shift=1),
    Slot(octave_shift=1),
    Slot(octave_shift=1),
])

This makes each note stutter 4 times, but leaves chords alone:


api.transforms.add(name='arp2', applies_to='notes', slots=[
    Slot(repeat=4),
])

A transform has the following properties:

slots list a list of Slot objects
divide int if set, configures the arpeggiator to split the available notes per step into this many subdivisions. If not set, the division is "auto", which will subdivide a triad 3 times, a power chord 2 times, and so on.
applies to string either chords, notes, or both - this controls whether the transform modifies certain steps based on whether they contain multiple or individual notes
direction string this works exactly as in Patterns - the transform direction does not have to match the pattern direction
auto_reset bool off by default, if True, the transform will start over at the beginning slot when processing each set of slots in a pattern.
arp bool on by default. if disabled, disables the arpeggiator on all note inputs. 'divide' will be ignored and all notes/chords will be effected directly.
  Tip: Variation of a clip is greatly increased when the pattern slots and the transform slots are of odd lengths - they will not completely line up the same every time as the patterns roll around and repeat.
  Tip: If creating a transform that shifts every other note up an octave for example, set arp to False to make sure chords are left intact.

In Context 

Reading the following API examples is recommended for understanding this section:

Next Up 

Now would be a good time to read up on Evaluators, which are an advanced feature of Slots, since transforms are built out of slots.