-- | Larry Polansky. "Notes on Piano Study #5".
-- _1, The Journal of the Just Intonation Newtork_, 1(4), Autumn 1985.
module Music.Theory.Tuning.Polansky_1985c where

import Music.Theory.Tuning.Type {- hmt -}

-- | The tuning has four octaves, these ratios are per-octave.
ps5_jpr_r :: [[Rational]]
ps5_jpr_r :: [[Rational]]
ps5_jpr_r =
    [[Rational
1, Rational
21forall a. Fractional a => a -> a -> a
/Rational
20, Rational
9forall a. Fractional a => a -> a -> a
/Rational
8, Rational
6forall a. Fractional a => a -> a -> a
/Rational
5, Rational
5forall a. Fractional a => a -> a -> a
/Rational
4,  Rational
4forall a. Fractional a => a -> a -> a
/Rational
3,   Rational
7forall a. Fractional a => a -> a -> a
/Rational
5, Rational
3forall a. Fractional a => a -> a -> a
/Rational
2, Rational
8forall a. Fractional a => a -> a -> a
/Rational
5,  Rational
5forall a. Fractional a => a -> a -> a
/Rational
3,  Rational
7forall a. Fractional a => a -> a -> a
/Rational
4, Rational
15forall a. Fractional a => a -> a -> a
/Rational
8]
    ,[Rational
1, Rational
21forall a. Fractional a => a -> a -> a
/Rational
20, Rational
9forall a. Fractional a => a -> a -> a
/Rational
8, Rational
6forall a. Fractional a => a -> a -> a
/Rational
5, Rational
5forall a. Fractional a => a -> a -> a
/Rational
4,  Rational
4forall a. Fractional a => a -> a -> a
/Rational
3,   Rational
7forall a. Fractional a => a -> a -> a
/Rational
5, Rational
3forall a. Fractional a => a -> a -> a
/Rational
2, Rational
8forall a. Fractional a => a -> a -> a
/Rational
5,  Rational
5forall a. Fractional a => a -> a -> a
/Rational
3,  Rational
7forall a. Fractional a => a -> a -> a
/Rational
4, Rational
15forall a. Fractional a => a -> a -> a
/Rational
8]
    ,[Rational
1, Rational
33forall a. Fractional a => a -> a -> a
/Rational
32, Rational
9forall a. Fractional a => a -> a -> a
/Rational
8, Rational
6forall a. Fractional a => a -> a -> a
/Rational
5, Rational
5forall a. Fractional a => a -> a -> a
/Rational
4, Rational
21forall a. Fractional a => a -> a -> a
/Rational
16, Rational
11forall a. Fractional a => a -> a -> a
/Rational
8, Rational
3forall a. Fractional a => a -> a -> a
/Rational
2, Rational
8forall a. Fractional a => a -> a -> a
/Rational
5, Rational
13forall a. Fractional a => a -> a -> a
/Rational
8,  Rational
7forall a. Fractional a => a -> a -> a
/Rational
4, Rational
15forall a. Fractional a => a -> a -> a
/Rational
8]
    ,[Rational
1, Rational
21forall a. Fractional a => a -> a -> a
/Rational
20, Rational
9forall a. Fractional a => a -> a -> a
/Rational
8, Rational
7forall a. Fractional a => a -> a -> a
/Rational
6, Rational
5forall a. Fractional a => a -> a -> a
/Rational
4,  Rational
4forall a. Fractional a => a -> a -> a
/Rational
3,  Rational
11forall a. Fractional a => a -> a -> a
/Rational
8, Rational
3forall a. Fractional a => a -> a -> a
/Rational
2, Rational
8forall a. Fractional a => a -> a -> a
/Rational
5, Rational
27forall a. Fractional a => a -> a -> a
/Rational
16, Rational
7forall a. Fractional a => a -> a -> a
/Rational
4, Rational
15forall a. Fractional a => a -> a -> a
/Rational
8]]

{- | Four-octave tuning.

> import Data.List.Split

> let r = [[   0,  84, 204, 316, 386, 498, 583, 702, 814, 884, 969,1088]
>         ,[1200,1284,1404,1516,1586,1698,1783,1902,2014,2084,2169,2288]
>         ,[2400,2453,2604,2716,2786,2871,2951,3102,3214,3241,3369,3488]
>         ,[3600,3684,3804,3867,3986,4098,4151,4302,4414,4506,4569,4688]]
> in chunksOf 12 (cents_i ps5_jpr) == r

> let r = [[0,84,204,316,386,498,583,702,814,884,969,1088]
>         ,[0,84,204,316,386,498,583,702,814,884,969,1088]
>         ,[0,53,204,316,386,471,551,702,814,841,969,1088]
>         ,[0,84,204,267,386,498,551,702,814,906,969,1088]]
> chunksOf 12 (map (`mod` 1200) (cents_i ps5_jpr))
-}
ps5_jpr :: Tuning
ps5_jpr :: Tuning
ps5_jpr =
    let f :: b -> [b] -> [b]
f b
m [b]
n = forall a b. (a -> b) -> [a] -> [b]
map (forall a. Num a => a -> a -> a
* b
m) [b]
n
        r :: [Rational]
r = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat (forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith forall {b}. Num b => b -> [b] -> [b]
f [Rational
1,Rational
2,Rational
4,Rational
8] [[Rational]]
ps5_jpr_r)
    in Either [Rational] [Cents]
-> Maybe (Either Rational Cents) -> Tuning
Tuning (forall a b. a -> Either a b
Left [Rational]
r) (forall a. a -> Maybe a
Just (forall a b. a -> Either a b
Left Rational
4))