Skip to contents

Just as the transpositions of the diatonic scale can be generated by Hook (2008)'s doi:10.1515/9781580467476-008 elementary "signature transformation," the transpositional voice leadings of any set can generally be decomposed into a small number of basic motions. These motions correspond to the arrows in a set's brightnessgraph(). (The qualifier "generally" is needed because of certain problematic edge cases, such as the perfectly even scales of edoo() whose minimal voice leadings always involve entirely parallel motion, which cannot be derived from "mode shift" voice leadings represented on a brightness graph.) vl_generators() identifies these basic voice-leading motions.

Usage

vl_generators(set, edo = 12, rounder = 10)

Arguments

set

Numeric vector of pitch-classes in the set

edo

Number of unit steps in an octave. Defaults to 12.

rounder

Numeric (expected integer), defaults to 10: number of decimal places to round to when testing for equality.

Value

2-by-m matrix whose m columns represent the m distinct voice-leading generators. The top row indicates the generic size of each interval; the bottom row indicates the specific size. Results are sorted so that the first row (generic intervals) is strictly increasing.

Examples

diatonic_scale <- c(0, 2, 4, 5, 7, 9, 11)
melodic_minor <- c(0, 2, 3, 5, 7, 9, 11)
vl_generators(diatonic_scale)
#>                    [,1]
#> generic_intervals     4
#> specific_intervals    7
vl_generators(melodic_minor)
#>                    [,1] [,2]
#> generic_intervals     1    5
#> specific_intervals    2    9
vl_generators(j(dia))
#>                        [,1]    [,2]
#> generic_intervals  2.000000 4.00000
#> specific_intervals 3.863137 7.01955

maj7 <- c(0, 4, 7, 11)
vl_generators(maj7)
#>                    [,1] [,2]
#> generic_intervals     1    2
#> specific_intervals    4    7