As defined by Tymoczko 2008 ("Scale Theory, Serial Theory and Voice Leading")
https://onlinelibrary.wiley.com/doi/10.1111/j.1468-2249.2008.00257.x,
the scalar interval matrix represents the "rotations" of a set,
transposed to begin on 0, in its columns. Its nth row represents the
specific intervals which represent its generic interval of size n. If changed
from its default (NULL
), the parameter goal
calculates Tymoczko's
interscalar interval matrix from set
to goal
.
Examples
diatonic_modes <- sim(c(0, 2, 4, 5, 7, 9, 11))
print(diatonic_modes)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> [1,] 0 0 0 0 0 0 0
#> [2,] 2 2 1 2 2 2 1
#> [3,] 4 3 3 4 4 3 3
#> [4,] 5 5 5 6 5 5 5
#> [5,] 7 7 7 7 7 7 6
#> [6,] 9 9 8 9 9 8 8
#> [7,] 11 10 10 11 10 10 10
miyakobushi_modes <- sim(c(0, 1, 5, 7, 8)) # rows show trivalence
print(miyakobushi_modes)
#> [,1] [,2] [,3] [,4] [,5]
#> [1,] 0 0 0 0 0
#> [2,] 1 4 2 1 4
#> [3,] 5 6 3 5 5
#> [4,] 7 7 7 6 9
#> [5,] 8 11 8 10 11
# Interscalar Interval Matrix:
sim(c(0, 3, 6, 10), c(0, 4, 7, 10))
#> [,1] [,2] [,3] [,4]
#> [1,] 0 1 1 0
#> [2,] 4 4 4 2
#> [3,] 7 7 6 6
#> [4,] 10 9 10 9
# Note that the interscalar matrices factor out transposition:
minor <- c(0, 3, 7)
major <- c(0, 4, 7)
sim(minor, major)
#> [,1] [,2] [,3]
#> [1,] 0 1 0
#> [2,] 4 4 5
#> [3,] 7 9 9
sim(minor-1, major)
#> [,1] [,2] [,3]
#> [1,] 0 1 0
#> [2,] 4 4 5
#> [3,] 7 9 9
sim(minor, major+2)
#> [,1] [,2] [,3]
#> [1,] 0 1 0
#> [2,] 4 4 5
#> [3,] 7 9 9
# But not permutation:
major_64 <- c(0, 5, 9)
major_open <- c(0, 7, 4)
sim(minor, major_64)
#> [,1] [,2] [,3]
#> [1,] 0 2 2
#> [2,] 5 6 5
#> [3,] 9 9 10
sim(minor, major_open)
#> [,1] [,2] [,3]
#> [1,] 0 4 -3
#> [2,] 7 1 5
#> [3,] 4 9 12