flex_points {musicMCT} | R Documentation |
Voice-leading inflection points
Description
When considering an n-note set's potential voice leadings to transpositions of a goal (along the lines
of vl_rolodex()
and tndists()
), there will always be some transposition in continuous pc-space
for which a given modal rotation is the best potential target for voice leading. (That is, there is
always some x
such that whichmodebest(set, tn(set, x)) == k
for any k
between 1
and n
.)
Moreover, there will always be a transposition level at the boundary between two different ideal modes,
where both modes require the same amount of voice leading work. flex_points()
identifies those
inflection points where one mode gives way to another. (Note: flex_points()
identifies these points
by numerical approximation, so it may not give exact values. For more precision, increase the value
of subdivide
.)
Usage
flex_points(
set,
goal = NULL,
method = c("taxicab", "euclidean", "chebyshev", "hamming"),
subdivide = 100,
edo = 12,
rounder = 10
)
Arguments
set |
Numeric vector of pitch-classes in the set |
goal |
Numeric vector like set: what is the tn-type of the voice leading's destination?
Defaults to |
method |
What distance metric should be used? Defaults to |
subdivide |
Numeric: how many small amounts should each |
edo |
Number of unit steps in an octave. Defaults to |
rounder |
Numeric (expected integer), defaults to |
Value
Numeric vector of the transposition indices that are inflection points. Length of result
matches size of set
, except in the case of some multisets, which can have fewer inflection points.
Examples
major_triad_12tet <- c(0, 4, 7)
major_triad_just <- z(1, 5/4, 3/2)
major_triad_19tet <- c(0, 6, 11)
flex_points(major_triad_12tet, method="euclidean", subdivide=1000)
flex_points(major_triad_just, method="euclidean", subdivide=1000)
# Note that the units of measurement correspond to edo.
# The value 3.16 here corresponds to exactly 1/6 of an octave.
flex_points(major_triad_19tet, edo=19)