hmt-0.14: Haskell Music Theory

Safe HaskellNone

Music.Theory.Z12.Forte_1973

Contents

Description

Allen Forte. The Structure of Atonal Music. Yale University Press, New Haven, 1973.

Synopsis

Prime form

t_rotations :: [Z12] -> [[Z12]]Source

T-related rotations of p.

 t_rotations [0,1,3] == [[0,1,3],[0,2,11],[0,9,10]]

ti_rotations :: [Z12] -> [[Z12]]Source

T/I-related rotations of p.

 ti_rotations [0,1,3] == [[0,1,3],[0,2,11],[0,9,10]
                         ,[0,9,11],[0,2,3],[0,1,10]]

minimumBy_or :: a -> (a -> a -> Ordering) -> [a] -> aSource

Variant with default value for empty input list case.

t_cmp_prime :: ([Z12] -> [Z12] -> Ordering) -> [Z12] -> [Z12]Source

Prime form rule requiring comparator, considering t_rotations.

ti_cmp_prime :: ([Z12] -> [Z12] -> Ordering) -> [Z12] -> [Z12]Source

Prime form rule requiring comparator, considering ti_rotations.

forte_cmp :: Ord t => [t] -> [t] -> OrderingSource

Forte comparison function (rightmost first then leftmost outwards).

 forte_cmp [0,1,3,6,8,9] [0,2,3,6,7,9] == LT

forte_prime :: [Z12] -> [Z12]Source

Forte prime form, ie. cmp_prime of forte_cmp.

 forte_prime [0,1,3,6,8,9] == [0,1,3,6,8,9]

Set Class Table

type SC_Name = StringSource

Synonym for String.

sc_table :: [(SC_Name, [Z12])]Source

The set-class table (Forte prime forms).

sc_name :: [Z12] -> SC_NameSource

Lookup a set-class name. The input set is subject to forte_prime before lookup.

 sc_name [0,2,3,6,7] == "5-Z18"
 sc_name [0,1,4,6,7,8] == "6-Z17"

sc :: SC_Name -> [Z12]Source

Lookup a set-class given a set-class name.

 sc "6-Z17" == [0,1,2,4,7,8]

scs :: [[Z12]]Source

List of set classes.

scs_n :: Integral i => i -> [[Z12]]Source

Cardinality n subset of scs.

 map (length . scs_n) [2..10] == [6,12,29,38,50,38,29,12,6]

BIP Metric

bip :: [Z12] -> [Z12]Source

Basic interval pattern, see Allen Forte "The Basic Interval Patterns" JMT 17/2 (1973):234-272

>>> bip 0t95728e3416
11223344556
 bip [0,10,9,5,7,2,8,11,3,4,1,6] == [1,1,2,2,3,3,4,4,5,5,6]
 bip (pco "0t95728e3416") == [1,1,2,2,3,3,4,4,5,5,6]

ICV Metric

ic :: Z12 -> Z12Source

Interval class of Z12 interval i.

 map ic [5,6,7] == [5,6,5]

icv :: Integral i => [Z12] -> [i]Source

Forte notation for interval class vector.

 icv [0,1,2,4,7,8] == [3,2,2,3,3,2]