-- | Kyle Gann.
module Music.Theory.Tuning.Db.Gann where

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

-- * Historical

-- | Cents for 'pietro_aaron_1523'.
--
-- > let c = [0,76,193,310,386,503,580,697,773,890,1007,1083]
-- > map round pietro_aaron_1523_c == c
--
-- > map ((+ 60) . (/ 100)) pietro_aaron_1523_c
pietro_aaron_1523_c :: [Cents]
pietro_aaron_1523_c :: [Cents]
pietro_aaron_1523_c =
    [Cents
0,Cents
76.0
    ,Cents
193.2,Cents
310.3
    ,Cents
386.3 -- 5/4
    ,Cents
503.4,Cents
579.5
    ,Cents
696.8,Cents
772.6 -- 25/16
    ,Cents
889.7,Cents
1006.8
    ,Cents
1082.9]

-- | Pietro Aaron (1523) meantone temperament, see
-- <http://www.kylegann.com/histune.html>
--
-- > tn_cents_i pietro_aaron_1523 == [0,76,193,310,386,503,580,697,773,890,1007,1083]
--
-- > import Music.Theory.Tuning.Scala
-- > scl <- scl_load "meanquar"
-- > tn_cents_i (scale_to_tuning 0.01 scl) == [0,76,193,310,386,503,579,697,773,890,1007,1083]
pietro_aaron_1523 :: Tuning
pietro_aaron_1523 :: Tuning
pietro_aaron_1523 = Either [Rational] [Cents]
-> Maybe (Either Rational Cents) -> Tuning
Tuning (forall a b. b -> Either a b
Right [Cents]
pietro_aaron_1523_c) forall a. Maybe a
Nothing

-- | Cents for 'thomas_young_1799'.
--
-- > let c = [0,94,196,298,392,500,592,698,796,894,1000,1092]
-- > map round thomas_young_1799_c == c
thomas_young_1799_c :: [Cents]
thomas_young_1799_c :: [Cents]
thomas_young_1799_c =
    [Cents
0,Cents
93.9
    ,Cents
195.8,Cents
297.8
    ,Cents
391.7
    ,Cents
499.9,Cents
591.9
    ,Cents
697.9,Cents
795.8
    ,Cents
893.8,Cents
999.8
    ,Cents
1091.8]

-- | Thomas Young (1799), Well Temperament, <http://www.kylegann.com/histune.html>.
--
-- > tn_cents_i thomas_young_1799 == [0,94,196,298,392,500,592,698,796,894,1000,1092]
--
-- > scl <- scl_load "young2"
-- > tn_cents_i (scale_to_tuning 0.01 scl) == tn_cents_i thomas_young_1799
thomas_young_1799 :: Tuning
thomas_young_1799 :: Tuning
thomas_young_1799 = Either [Rational] [Cents]
-> Maybe (Either Rational Cents) -> Tuning
Tuning (forall a b. b -> Either a b
Right [Cents]
thomas_young_1799_c) forall a. Maybe a
Nothing

-- | Ratios for 'zarlino'.
--
-- > length zarlino_1588_r == 16
zarlino_1588_r :: [Rational]
zarlino_1588_r :: [Rational]
zarlino_1588_r = [Rational
1,Rational
25forall a. Fractional a => a -> a -> a
/Rational
24,Rational
10forall a. Fractional a => a -> a -> a
/Rational
9,Rational
9forall a. Fractional a => a -> a -> a
/Rational
8,Rational
32forall a. Fractional a => a -> a -> a
/Rational
27,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
25forall a. Fractional a => a -> a -> a
/Rational
18,Rational
45forall a. Fractional a => a -> a -> a
/Rational
32,Rational
3forall a. Fractional a => a -> a -> a
/Rational
2,Rational
25forall a. Fractional a => a -> a -> a
/Rational
16,Rational
5forall a. Fractional a => a -> a -> a
/Rational
3,Rational
16forall a. Fractional a => a -> a -> a
/Rational
9,Rational
9forall a. Fractional a => a -> a -> a
/Rational
5,Rational
15forall a. Fractional a => a -> a -> a
/Rational
8]

-- | Gioseffo Zarlino, 1588, see <http://www.kylegann.com/tuning.html>.
--
-- > tn_divisions zarlino_1588 == 16
-- > tn_cents_i zarlino_1588 == [0,71,182,204,294,316,386,498,569,590,702,773,884,996,1018,1088]
--
-- > scl <- scl_load "zarlino2"
-- > tn_cents_i (scale_to_tuning 0.01 scl) == tn_cents_i zarlino_1588
zarlino_1588 :: Tuning
zarlino_1588 :: Tuning
zarlino_1588 = Either [Rational] [Cents]
-> Maybe (Either Rational Cents) -> Tuning
Tuning (forall a b. a -> Either a b
Left [Rational]
zarlino_1588_r) forall a. Maybe a
Nothing

-- * 20th Century

-- | Ratios for 'ben_johnston_mtp_1977'.
--
-- > let c = [0,105,204,298,386,471,551,702,841,906,969,1088]
-- > map (round . ratio_to_cents) ben_johnston_mtp_1977_r == c
ben_johnston_mtp_1977_r :: [Rational]
ben_johnston_mtp_1977_r :: [Rational]
ben_johnston_mtp_1977_r =
    [Rational
1,Rational
17forall a. Fractional a => a -> a -> a
/Rational
16
    ,Rational
9forall a. Fractional a => a -> a -> a
/Rational
8,Rational
19forall a. Fractional a => a -> a -> a
/Rational
16
    ,Rational
5forall a. Fractional a => a -> a -> a
/Rational
4
    ,Rational
216,Rational
11forall a. Fractional a => a -> a -> a
/Rational
8
    ,Rational
3forall a. Fractional a => a -> a -> a
/Rational
2,Rational
13forall a. Fractional a => a -> a -> a
/Rational
8
    ,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]

-- | Ben Johnston's \"Suite for Microtonal Piano\" (1977), see
-- <http://www.kylegann.com/tuning.html>
--
-- > tn_cents_i ben_johnston_mtp_1977 == [0,105,204,298,386,471,551,702,841,906,969,1088]
ben_johnston_mtp_1977 :: Tuning
ben_johnston_mtp_1977 :: Tuning
ben_johnston_mtp_1977 = Either [Rational] [Cents]
-> Maybe (Either Rational Cents) -> Tuning
Tuning (forall a b. a -> Either a b
Left [Rational]
ben_johnston_mtp_1977_r) forall a. Maybe a
Nothing

-- * Gann

-- | Ratios for 'gann_arcana_xvi'.
gann_arcana_xvi_r :: [Rational]
gann_arcana_xvi_r :: [Rational]
gann_arcana_xvi_r =
    [Rational
1,Rational
21forall a. Fractional a => a -> a -> a
/Rational
20,Rational
16forall a. Fractional a => a -> a -> a
/Rational
15,Rational
9forall a. Fractional a => a -> a -> a
/Rational
8,Rational
7forall a. Fractional a => a -> a -> a
/Rational
6,Rational
6forall a. Fractional a => a -> a -> a
/Rational
5,Rational
11forall a. Fractional a => a -> a -> a
/Rational
9,Rational
5forall a. Fractional a => a -> a -> a
/Rational
4,Rational
216,Rational
4forall a. Fractional a => a -> a -> a
/Rational
3,Rational
27forall a. Fractional a => a -> a -> a
/Rational
20,Rational
7forall a. Fractional a => a -> a -> a
/Rational
5
    ,Rational
22forall a. Fractional a => a -> a -> a
/Rational
15,Rational
3forall a. Fractional a => a -> a -> a
/Rational
2,Rational
55forall a. Fractional a => a -> a -> a
/Rational
36,Rational
8forall a. Fractional a => a -> a -> a
/Rational
5,Rational
44forall a. Fractional a => a -> a -> a
/Rational
27,Rational
5forall a. Fractional a => a -> a -> a
/Rational
3,Rational
42forall a. Fractional a => a -> a -> a
/Rational
25,Rational
7forall a. Fractional a => a -> a -> a
/Rational
4,Rational
9forall a. Fractional a => a -> a -> a
/Rational
5,Rational
11forall a. Fractional a => a -> a -> a
/Rational
6,Rational
15forall a. Fractional a => a -> a -> a
/Rational
8,Rational
88forall a. Fractional a => a -> a -> a
/Rational
45]

-- | Kyle Gann, _Arcana XVI_, see <http://www.kylegann.com/Arcana.html>.
--
-- > let r = [0,84,112,204,267,316,347,386,471,498,520,583,663,702,734,814,845,884,898,969,1018,1049,1088,1161]
-- > tn_cents_i gann_arcana_xvi == r
gann_arcana_xvi :: Tuning
gann_arcana_xvi :: Tuning
gann_arcana_xvi = Either [Rational] [Cents]
-> Maybe (Either Rational Cents) -> Tuning
Tuning (forall a b. a -> Either a b
Left [Rational]
gann_arcana_xvi_r) forall a. Maybe a
Nothing

-- | Ratios for 'gann_superparticular'.
gann_superparticular_r :: [Rational]
gann_superparticular_r :: [Rational]
gann_superparticular_r =
    [Rational
1,Rational
110,Rational
10forall a. Fractional a => a -> a -> a
/Rational
9,Rational
9forall a. Fractional a => a -> a -> a
/Rational
8,Rational
8forall a. Fractional a => a -> a -> a
/Rational
7,Rational
7forall a. Fractional a => a -> a -> a
/Rational
6,Rational
6forall a. Fractional a => a -> a -> a
/Rational
5,Rational
5forall a. Fractional a => a -> a -> a
/Rational
4,Rational
9forall a. Fractional a => a -> a -> a
/Rational
7,Rational
4forall a. Fractional a => a -> a -> a
/Rational
3
    ,Rational
11forall a. Fractional a => a -> a -> a
/Rational
8,Rational
7forall a. Fractional a => a -> a -> a
/Rational
5,Rational
10forall a. Fractional a => a -> a -> a
/Rational
7,Rational
3forall a. Fractional a => a -> a -> a
/Rational
2
    ,Rational
11forall a. Fractional a => a -> a -> a
/Rational
7,Rational
14forall a. Fractional a => a -> a -> a
/Rational
9,Rational
8forall a. Fractional a => a -> a -> a
/Rational
5,Rational
5forall a. Fractional a => a -> a -> a
/Rational
3,Rational
12forall a. Fractional a => a -> a -> a
/Rational
7,Rational
7forall a. Fractional a => a -> a -> a
/Rational
4,Rational
16forall a. Fractional a => a -> a -> a
/Rational
9,Rational
9forall a. Fractional a => a -> a -> a
/Rational
5]

-- | Kyle Gann, _Superparticular_, see <http://www.kylegann.com/Super.html>.
--
-- > tn_divisions gann_superparticular == 22
--
-- > let r = [0,165,182,204,231,267,316,386,435,498,551,583,617,702,782,765,814,884,933,969,996,1018]
-- > tn_cents_i gann_superparticular == r
--
-- > scl <- scl_load "gann_super"
-- > tn_cents_i (scale_to_tuning 0.01 scl) == tn_cents_i gann_superparticular
gann_superparticular :: Tuning
gann_superparticular :: Tuning
gann_superparticular = Either [Rational] [Cents]
-> Maybe (Either Rational Cents) -> Tuning
Tuning (forall a b. a -> Either a b
Left [Rational]
gann_superparticular_r) forall a. Maybe a
Nothing