| vlsig | R Documentation |
Calculate elementary voice leadings which represent motion by a single
arrow on a brightnessgraph(). vlsig() finds "voice-leading signature"
of a set moving to transpositions of itself, as determined by vl_generators(). inter_vlsig()
finds the elementary voice leadings from a set to some other set, i.e. where the goal
parameter of brightnessgraph() is not NULL. By default, inter_vlsig() finds
voice leadings for contextual inversions of a set.
vlsig(set, index = NULL, display_digits = 2, edo = 12, rounder = 10)
inter_vlsig(
set,
goal = NULL,
index = NULL,
type = c("ascending", "commontone", "obverse"),
display_digits = 2,
edo = 12,
rounder = 10
)
set |
Numeric vector of pitch-classes in the set |
index |
Integer: which voice-leading generator should be displayed? Defaults to |
display_digits |
Integer: how many digits to display when naming any non-integral interval sizes. Defaults to 2. |
edo |
Number of unit steps in an octave. Defaults to |
rounder |
Numeric (expected integer), defaults to |
goal |
For |
type |
For |
Note that the voice leadings determined by vlsig() can be different from the
corresponding ones at the same T_n level in vl_rolodex(). The latter function
prioritizes minimal voice leadings, whereas vlsig() prioritizes elementary voice
leadings derived from a set's brightnessgraph(). In particular, this means that
vlsig() voice leadings will always be ascending, involve at least one common tone,
and involve no contrary motion. See the odd_pentachord voice leadings in the Examples.
For vlsig() the value "rotation" in the result is non-arbitrary: if the rotation value
is n, the voice leading takes set to the nth mode of set. For inter_vlsig(), there
is no canonical correspondence between modes of set and goal, except to assume that
the input modes are the 1st mode of each scale. If goal is NULL, finding contextual
inversions of set, the first mode of the inversion is taken to be the one that holds the
first and last pitches of set in common. These "rotation" values do not have a transparent
relationship to the values of inter_vlsig()'s index parameter.
For inter_vlsig() results are not as symmetric between set and goal as you might
expect. Since these voice-leading functions study ascending arrows on a brightness graph
the possibilities for ascending from X to Y are in principle somewhat different from
the possibilities for ascending from Y to X. See the examples for the "Tristan genus."
Note that this is still true when type="commontone", which might lead to counterintuitive
results.
List with three elements:
"vl" which shows the distance (in edo steps) that each voice moves,
"tn" which indicates the (chromatic) transposition achieved by the voice leading,
"rotation" which indicates the scalar transposition caused by the voice leading.
If index=NULL, returns instead a matrix whose rows are
all the elementary voice leadings.
vl_generators() and brightnessgraph()
# Hook's elementary signature transformation
major_scale <- c(0, 2, 4, 5, 7, 9, 11)
vlsig(major_scale, index=1)
pure_major_triad <- j(1, 3, 5)
vlsig(pure_major_triad, index=1)
vlsig(pure_major_triad, index=2)
odd_pentachord <- c(0, 1, 4, 9, 11) # in 15-edo
vlsig(odd_pentachord, index=2, edo=15)
vl_rolodex(odd_pentachord, edo=15)$"8"
# Contextual inversions for Tristan genus:
dom7 <- c(0, 4, 7, 10)
halfdim7 <- c(0, 3, 6, 10)
inter_vlsig(dom7, halfdim7)
inter_vlsig(halfdim7, dom7)
# Elementary voice leadings between unrelated sets:
maj7 <- c(0, 4, 7, 11)
min7 <- c(0, 3, 7, 10)
inter_vlsig(min7, maj7)
brightnessgraph(min7, maj7)
# Elementary inversional VL for just diatonic which is NOT a Q-relation:
inter_vlsig(j(dia), index=3)
# Obverse voice leadings:
# First we see the Parallel transformation which leads from minor to major:
minor <- c(0, 3, 7)
P <- inter_vlsig(minor, index=1)
print(P)
# Compare to its obverse, Slide, leading *to* minor from major:
S <- inter_vlsig(minor, index=1, type="obverse")
print(S)
# A voice-leading plus its obverse is a chromatic transposition:
P$vl + S$vl
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.