Aberrismic theory

From Xenharmonic Wiki
Jump to navigation Jump to search

groundfault's aberrismic theory is a xen theoretical paradigm using aberrismas[idiosyncratic term], a type of scale step which can be added to a scale pattern to turn it into a scale of one rank higher. The aberrisma is a new category of melodic steps that are smaller than the steps in the original scale, which prototypically are categorical "seconds" such as whole tones and semitones. The typical range for an aberrisma is 20 to 60 cents; groundfault holds the optimal melodic size for an aberrisma to be approximately 40 cents. Examples of ternary patterns that can be made by adding aberrismas to the 5L2s diatonic MOS are:

For more information on the idiosyncratic math notation on this page, see User:Inthar/Notation.

Edos with quasi-diatonic aberrismic scales

All edos 20 and above have an aberrismic scale of the form 5L2mks. If n = 5p + 2q where p > q > 1 (n-edo is a diatonic edo with step ratio p:q), then (n + k)edo has a 5L2mks scale with step ratio p:q:1 for 1 ≤ k < q, and (n + rk)edo has a 5L2mks scale with step ratio p:q:r if 1 ≤ rrk < q.

Aberrismic theory and RTT

Aberrismic theory often applies RTT to ternary LCJI scales with comma steps. Certain scales with aberrismas may thus be endowed with JI interpretations via RTT temperaments, which may be used in suitable equal temperaments. Under groundfault's use of edos (usually patent vals) as RTT temperaments, the aberrisma tends to become a 81/80 in a 2.3.5 context and a 64/63 in a 2.3.7 context. Some scales such as 5L2m5s and 5L2m7s admit a more accurate 2.3.5.7 interpretation that tempers out neither 81/80 nor 64/63 but identifies the two commas, tempering out 5120/5103. Tempering is important in aberrismic theory as a way to improve the function of commas (frequently 81/80 or 64/63) as aberrismas in ternary LCJI scales by tempering them larger than just.

At times, a scale pattern has varying temperaments according to the tuning. For example, 5L2m3s may be given the temperament structure of either untempered 2.3.5 or Ultrapyth temperament.

Mathematically, this difference corresponds to choices of [math]\mathbb{Z}[/math]-linear maps [math]\alpha : \mathbb{Z}^3\langle\mathbf{L}, \mathbf{m}, \mathbf{s}\rangle \to \mathrm{JI}( 2, p_1, ..., p_s )/\mathrm{ker}(T)[/math] (here [math]T[/math] is a temperament map defined on the 2.p1....ps subgroup), determined by differing choices of [math]\alpha(\mathbf{L}), \alpha(\mathbf{m}), \alpha(\mathbf{s})[/math] and subject to the constraint that [math]a\alpha(\mathbf{L}) + b\alpha(\mathbf{m}) + c\alpha(\mathbf{s}) = T(2)[/math] for the ternary scale aLbmcs. Thus there are two choices involved in interpreting a given ternary scale, namely the choice of temperament and the choice of where to map the scale steps. The assignment of scale steps to tempered intervals is chosen to improve coverage of important LCJI intervals.

Example: blackdye

The following table shows two different temperament interpretations for the same aberrismic scale pattern blackdye (sLmLsLmLsL), under untempered 2.3.5 and Ultrapyth respectively.

  • Untempered does not mean that the final tuning must be the JI tuning, but simply that there exists an exact JI tuning, or that the temperament before applying the tuning map has the same rank as the JI subgroup. This also implies that there is only one JI ratio for each interval under such interpretations, unlike in temperaments that temper out commas.
  • Ultrapyth, 2.3.5.7.11.13[32 & 37], is a diatonic temperament generated by a fifth even sharper than in Superpyth. 37edo provides a nearly optimal tuning. Note that we chose to regard the 3-step 2L + s as a 14/11 rather than as a 5/4, lest the interpretation merely be an extension of the untempered 2.3.5 one. groundfault terms the tuning of blackdye that makes aberrisma-altered Pyth thirds 13/11 and 14/11 Flutterpyth blackdye, since Flutterpyth temperament is restricted to (maximally) 2.3.7.11.13.19 and does not include 5-limit thirds.
Blackdye intervals in two temperaments
Interval class Sizes Untempered 2.3.5 2.3.7.11.13 Flutterpyth (extended to 13-limit Ultrapyth)
1-steps s
m
L
81/80
16/15
10/9
143/140
22/21
160/143
2-steps L + s
L + m
9/8
32/27
8/7, 9/8
7/6
3-steps L + 2s
L + m + s
2L + s
2L + m
729/640
6/5
5/4
320/243
7/6
13/11
14/11
13/10
4-steps 2L + 2s
2L + m + s
81/64
4/3
13/10
4/3
5-steps 2L + m + 2s
2L + 2m + s
3L + 2s
3L + m + s
27/20
64/45
45/32
40/27
66/49
11/8
16/11
49/33
6-steps 3L + m + 2s
3L + 2m + s
3/2
128/81
3/2
20/13
7-steps 3L + m + 3s
3L + 2m + 2s
4L + m + 2s
4L + 2m + s
243/160
8/5
5/3
1280/729
20/13
11/7
22/13
12/7
8-steps 4L + m + 3s
4L + 2m + 2s
27/16
16/9
12/7
7/4, 16/9
9-steps 5L + 2m + s
5L + m + 2s
4L + 2m + 2s
9/5
15/8
160/81
143/80
21/11
280/143

Code

Haskell function for edo tunings of aberrismic scales:

import Data.List

-- `k`\`edo` in cents.
stepsOfEdoInCents :: Int -> Int -> Double
stepsOfEdoInCents k edo = 1200*fromIntegral k/fromIntegral edo

-- Generate all possible combinations of sizes of L, M, and s.
generateCombinations :: Int -> [(Int, Int, Int)]
generateCombinations edoBound = [(l, m, s) | l <- [3..edoBound], m <- [2..l-1], s <- [1..m-1]]

-- Filter the combinations based on the step signature and the given range for the aberrisma (s step).
filterCombinations :: Double -> Double -> Int -> Int -> Int -> [(Int, Int, Int)] -> [(Int, (Int, Int, Int))]
filterCombinations aberLower aberUpper countL countM countS combos =
    [(edo, (l, m, s)) | (l, m, s) <- combos,
                        let edo = countL*l + countM*m + countS*s,
                        let aberSize = stepsOfEdoInCents s edo,
                        aberLower <= aberSize && aberSize <= aberUpper]

{- Return a list of (edo, step ratio) tuples for the `(countL)L(countM)M(countS)s` aberrismic scale where `edo <= edoBound`,
   where the tuning's s step satisfies the bound `aberLower` <= s <= `aberUpper`.
   Non-coprime step ratios are not reduced. -}
boundedEdosWithTernaryAberrismicScale :: Int -> Double -> Double -> Int -> Int -> Int -> [(Int, (Int, Int, Int))]
boundedEdosWithTernaryAberrismicScale edoBound aberLower aberUpper countL countM countS =
    sortBy (\x y -> compare (fst x) (fst y)) -- sort by the edo
    $ filter (\x -> fst x <= edoBound) -- filter edos exceeding edoBound
    $ filterCombinations aberLower aberUpper countL countM countS
    $ generateCombinations edoBound

{- 
`boundedEdosWithTernaryAberrismicScale 53 20.0 60.0 5 2 3` returns:
`[(22,(3,2,1)),(27,(4,2,1)),(29,(4,3,1)),(32,(5,2,1)),(34,(5,3,1)),(36,(5,4,1)),(37,(6,2,1)),(39,(6,3,1)),(41,(6,4,1)),(42,(6,3,2)),(42,(7,2,1)),(43,(6,5,1)),(44,(6,4,2)),(44,(7,3,1)),(46,(6,5,2)),(46,(7,4,1)),(47,(7,3,2)),(47,(8,2,1)),(48,(7,5,1)),(49,(7,4,2)),(49,(8,3,1)),(50,(7,6,1)),(51,(7,5,2)),(51,(8,4,1)),(52,(8,3,2)),(52,(9,2,1)),(53,(7,6,2)),(53,(8,5,1))]`

-}