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

Scales


About

Warp natively understands musical scales/modes, so that notes in Patterns can be expressed as scale degrees and easily shifted between different scales, without having to rely on classic 'force to scale' mechanics that do not provide support for blue notes. In Warp, scales can either be generated from included scale types, or user supplied, by expressing them in scale degrees.

While a default scale can be assigned to a Song, scale assignments can be overriden on individual Scenes or Clips.

As it's important to support percussion tracks, it's possible to enter literal notes such as "C0" without using scale degrees or being subject to scale transpositions. We'll showcase this when we get to Slots.



Creating A Scale 

Canned scales:


api.scales.add(name='intro', note='C', octave=0, scale_type='major')

User defined scale types:


api.scales.add(name='user_example', note='C', octave=0, slots=[ 1, 2, 'b3', 5, 'b6' ])

A scale has the following properties:

Property Type Description
name string A symbolic name for the scale, which will can be refererenced from a Song, Scene, or Clip.
note string The root of the scale, such as "C", "Bb" or "F#"
octave int the base octave - note that transpositions below this value are not possible, so it is better to adjust the global octave using the parameter base_octave on Instrument.
scale_type string the name of a built-in scale type to construct the scale from - see below for values
slots list of ints/strings The scale degrees to be used in forming the scale as shown in the above example. Mutually exclusive with scale_type.
  Tip: naming your scales things like intro is better than naming them Eb-natural-minor because you can decide to change the definition of intro later to try out large-scale variations in your song, anywhere intro is referenced.

Built-In Scales 

Valid values for scale_type are:

   major              = [ 1, 2, 3, 4, 5, 6, 7 ],
   pentatonic         = [ 1, 2, 3, 5, 6 ],
   pentatonic_minor   = [ 1, 3, 4, 5, 7 ],
   natural_minor      = [ 1, 2, 'b3', 4, 5, 'b6', 'b7' ],
   blues              = [ 1, 'b3', 4, 'b5', 5, 'b7' ],
   dorian             = [ 1, 2, 'b3', 4, 5, 6, 'b7' ],
   chromatic          = [ 1, 'b2', 2, 'b3', 3, 4, 'b5', 5, 'b6', 6, 'b7', 7 ],
   harmonic_major     = [ 1, 2, 3, 4, 5, 'b6', 7 ],
   harmonic_minor     = [ 1, 2, 3, 4, 5, 'b6', 7 ],
   locrian            = [ 1, 'b2', 'b3', 4, 'b5', 'b6', 'b7' ],
   lydian             = [ 1, 2, 3, 'b5', 5, 6, 7 ],
   major_pentatonic   = [ 1, 2, 3, 5, 6 ],
   melodic_minor_asc  = [ 1, 2, 'b3', 4, 5, 'b7', 'b8', 8 ],
   melodic_minor_desc = [ 1, 2, 'b3', 4, 5, 'b6', 'b7', 8 ],
   minor_pentatonic   = [ 1, 'b3', 4, 5, 'b7' ],
   mixolydian         = [ 1, 2, 3, 4, 5, 6, 'b7' ],
   phrygian           = [ 1, 'b2', 'b3', 4, 5, 'b6', 'b7' ],
   japanese           = [ 1, 2, 4, 5, 6 ],
   akebono            = [ 1, 2, 'b3', 5, 6 ]

This list will grow over time. Contributions of your favorite scales are welcome.


Suggestions & Tips 


In Context 

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

Next Up 

See Patterns