Skip to contents

Is the pc-set inversionally symmetrical? That is, does it map onto itself under \(T_n I\) for some appropriate \(n\)? isym() can return either TRUE/FALSE or an index of symmetry but defaults to the former. isym_index() is a simple wrapper for isym() that returns the latter. isym_degree() counts the total number of inversional symmetries (i.e. the number of distinct inversional axes of symmetry).

Usage

isym(set, return_index = FALSE, edo = 12, rounder = 10)

isym_index(set, ...)

isym_degree(set, ...)

Arguments

set

Numeric vector of pitch-classes in the set

return_index

Should the function return a specific index at which the set is symmetrical? Defaults to FALSE.

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.

...

Arguments to be passed to isym()

Value

isym() returns the Boolean value from testing for symmetry, unless return_index=TRUE, in which case isym() and isym_index() return a numeric value for one index of inversion at which the set is symmetrical. If the set is not inversionally symmetrical, they will return NA. isym_degree() gives the degree of inversional symmetry.

Details

isym() is evaluated by asking whether, for some appropriate rotation, the step-interval series of the given set is equal to the step-interval series of the set's inversion. This is designed to work for sets in continuous pc-space, not just integers mod k. Note also that this calculates abstract pitch-class symmetry, not potential symmetry in pitch space. (See the second example.)

Examples

#### Mod 12
isym(c(0, 1, 5, 8))
#> [1] TRUE
isym(c(0, 2, 4, 8))
#> [1] TRUE

#### Continuous Values
qcm_fifth <- meantone_fifth()
qcm_dia <- sort(((0:6)*qcm_fifth)%%12)
just_dia <- j(dia)
isym(qcm_dia)
#> [1] TRUE
isym(just_dia)
#> [1] FALSE

#### Rounding matters:
isym(qcm_dia, rounder=15)
#> [1] FALSE

### Index and Degree
hexatonic_scale <- c(0, 1, 4, 5, 8, 9)
isym_index(hexatonic_scale) # Only returns one suitable index
#> [1] 9
isym_degree(hexatonic_scale)
#> [1] 3