-- | Larry Polansky. \"Notes on the Tunings of Three Central Javanese
-- Slendro\/Pelog Pairs\". /Experimental Musical Instruments/,
-- 6(2):12-13,16-17, 1990.
module Music.Theory.Tuning.Polansky_1990 where

import Data.Ratio
import qualified Music.Theory.List as L
import qualified Music.Theory.Tuning as T

-- | Kanjutmesem Slendro (S1,S2,S3,S5,S6,S1')
--
-- > L.d_dx kanjutmesem_s == [252,238,241,236,253]
kanjutmesem_s :: Num n => [n]
kanjutmesem_s = [0,252,490,731,967,1220]

-- | Kanjutmesem Pelog (P1,P2,P3,P4,P5,P6,P7,P1')
--
-- > L.d_dx kanjutmesem_p == [141,141,272,140,115,172,246]
kanjutmesem_p :: Num n => [n]
kanjutmesem_p = [37,178,319,591,731,846,1018,1264]

-- | Darius Slendro (S1,S2,S3,S5,S6,S1')
--
-- > L.d_dx darius_s == [204,231,267,231,267]
-- > ax_r darius_s == [9/8,8/7,7/6,8/7,7/6]
darius_s :: Num n => [n]
darius_s = [0,204,435,702,933,1200]

-- | Madeleine Pelog (P1,P2,P3,P4,P5,P6,P7,P1')
--
-- > L.d_dx madeleine_p == [139,128,336,99,94,173,231]
-- > ax_r madeleine_p == [13/12,14/13,17/14,18/17,19/18,21/19,8/7]
madeleine_p :: Num n => [n]
madeleine_p = [137,276,404,740,839,933,1106,1337]

-- | Lipur Sih Slendro (S1,S2,S3,S5,S6,S1')
--
-- > L.d_dx lipur_sih_s == [273,236,224,258,256]
lipur_sih_s :: Num n => [n]
lipur_sih_s = [0,273,509,733,991,1247]

-- | Lipur Sih Pelog (P1,P2,P3,P4,P5,P6,P7,P1')
--
-- > L.d_dx lipur_sih_p == [110,153,253,146,113,179]
lipur_sih_p :: Num n => [n]
lipur_sih_p = [216,326,479,732,878,991,1170]

-- | Idealized ET Slendro, 5-tone equal temperament (p.17)
--
-- > L.d_dx idealized_et_s == [240,240,240,240,240]
idealized_et_s :: Num n => [n]
idealized_et_s = [0,240,480,720,960,1200]

-- | Idealized ET Pelog, subset of 9-tone equal temperament (p.17)
--
-- > L.d_dx idealized_et_p == [400/3,800/3,400/3,400/3,400/3,400/3,800/3]
idealized_et_p :: Integral n => [Ratio n]
idealized_et_p = [160,293+1/3,560,693+1/3,826+2/3,960,1093+1/3,1360]

-- | Reconstruct approximate ratios to within @1e-3@ from intervals.
ax_r :: Real n => [n] -> [Rational]
ax_r = map (T.reconstructed_ratio 1e-3 . realToFrac) . L.d_dx