Aberrismic theory: Difference between revisions

Inthar (talk | contribs)
m Code: Update documentation
Inthar (talk | contribs)
mNo edit summary
Line 76: Line 76:


== Code ==
== Code ==
Haskell function for edo tunings of aberrismic scales:
<syntaxhighlight lang="python">
<syntaxhighlight lang="haskell">
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))]`
 
-}
</syntaxhighlight>
</syntaxhighlight>
[[Category:Terms]]
[[Category:Terms]]
[[Category:Aberrismic theory|*]]<!--Main article-->
[[Category:Aberrismic theory|*]]<!--Main article-->