module Sound.Tidal.Scales (scale, scaleList, scaleTable, getScale) where

import Prelude hiding ((<*), (*>))
import Data.Maybe
import Sound.Tidal.Pattern
import Sound.Tidal.Utils

-- five notes scales
minPent :: Fractional a => [a]
minPent :: [a]
minPent = [0,3,5,7,10]
majPent :: Fractional a => [a]
majPent :: [a]
majPent = [0,2,4,7,9]

--  another mode of major pentatonic
ritusen :: Fractional a => [a]
ritusen :: [a]
ritusen = [0,2,5,7,9]

-- another mode of major pentatonic
egyptian :: Fractional a => [a]
egyptian :: [a]
egyptian = [0,2,5,7,10]

--
kumai :: Fractional a => [a]
kumai :: [a]
kumai = [0,2,3,7,9]
hirajoshi :: Fractional a => [a]
hirajoshi :: [a]
hirajoshi = [0,2,3,7,8]
iwato :: Fractional a => [a]
iwato :: [a]
iwato = [0,1,5,6,10]
chinese :: Fractional a => [a]
chinese :: [a]
chinese = [0,4,6,7,11]
indian :: Fractional a => [a]
indian :: [a]
indian = [0,4,5,7,10]
pelog :: Fractional a => [a]
pelog :: [a]
pelog = [0,1,3,7,8]

--
prometheus :: Fractional a => [a]
prometheus :: [a]
prometheus = [0,2,4,6,11]
scriabin :: Fractional a => [a]
scriabin :: [a]
scriabin = [0,1,4,7,9]

-- han chinese pentatonic scales
gong :: Fractional a => [a]
gong :: [a]
gong = [0,2,4,7,9]
shang :: Fractional a => [a]
shang :: [a]
shang = [0,2,5,7,10]
jiao :: Fractional a => [a]
jiao :: [a]
jiao = [0,3,5,8,10]
zhi :: Fractional a => [a]
zhi :: [a]
zhi = [0,2,5,7,9]
yu :: Fractional a => [a]
yu :: [a]
yu = [0,3,5,7,10]

-- 6 note scales
whole' :: Fractional a => [a]
whole' :: [a]
whole' = [0,2,4,6,8,10]
augmented :: Fractional a => [a]
augmented :: [a]
augmented = [0,3,4,7,8,11]
augmented2 :: Fractional a => [a]
augmented2 :: [a]
augmented2 = [0,1,4,5,8,9]

-- hexatonic modes with no tritone
hexMajor7 :: Fractional a => [a]
hexMajor7 :: [a]
hexMajor7 = [0,2,4,7,9,11]
hexDorian :: Fractional a => [a]
hexDorian :: [a]
hexDorian = [0,2,3,5,7,10]
hexPhrygian :: Fractional a => [a]
hexPhrygian :: [a]
hexPhrygian = [0,1,3,5,8,10]
hexSus :: Fractional a => [a]
hexSus :: [a]
hexSus = [0,2,5,7,9,10]
hexMajor6 :: Fractional a => [a]
hexMajor6 :: [a]
hexMajor6 = [0,2,4,5,7,9]
hexAeolian :: Fractional a => [a]
hexAeolian :: [a]
hexAeolian = [0,3,5,7,8,10]

-- 7 note scales
major :: Fractional hexDorian :: [a]
hexDorian]

-- 7 note scales
5an class="hs-identifier hs-type">whole' 5,7,9,10]
an>25an class="hs-identifier hs class="hs-number">57/span>n an>,= [0,2,an class="hs-identifier hs-type">whole' 5746span>5,,2pan class="annotype">an class="hs-identifier hs-type">wspan class="hs-special">[525an class="hs-identifier hs class="hs-number">57/span>[=,n class="hs-identifier hs-type">whole'span class="annotf>=,n class="hs-identifier hs-type">whole'n class="hs-identifier hs-type">whole'n class="hs-identifier hs-type">whole2,an class="hs-identifier hs-type">whole'an class="hs-special">]
yu :: [a]
yu 5,,2pan class="annotype">aan id="hexMajor6">5,,2pan class="annotype">a,2,4,<7span>5,7,9>,n class="hs-identifier hs-type">whole'n class="hs-identifier hs-type">whole']

-- han chinese pentatonic scales
n class="hs-identi494">instance whole' :: [a]
9>instance whole' :: [a]
9>whole' :: [a]
M
  • Nwhole' :: [a] 9>= [,7,n class="hs-number">5,,,= [,7777777777777777whole' :: [a] -- 7 note scales 9:: Fractional 9>Nwhole' :: [a] 9>= [0,1<>span class="annotf>=,n class="hs-identifier hs-type"> class="class "hs-special">,>Nspan>-- 7 note scales ,9:: ([Context] -> Cont 1<>span class="annotf>=,n class="hs-identifier hs-type"> class="class "hs-specialclass="hs-special">,1<>span class="annotf>=,< clailass="hs lyph">=,9> class="class "hs-sp([(Int, (Arc, Arc))] -> [Event ControlMap]) -> [(Int, (Arc, Arc))] -> [Event ControlMap] forall a b. (a -> b) -> a -> b $ Arc -> Arc -> [(scales 29 href="Sound.Tidal.Scales.html#major">=w Arc > class="class "hs-sp([(In /span>w Arc > class="class "hs-sp([(In /nnottext">Arc > class="class "hs-sp([(In /nnottext">Arc > class="class >Arc > class="class "hs-sp([(In /nnottext">Arc > class#local-6989586621679151l">> class="class "hs-sp([(In /nnottext">Arc > class="clas">Apaentifier51l">> class="class "hs-sp([(In /nno; [Event ControlMap] forall a b. (a -> b) -> a -> b > class="clas">Apaentifier51l">> class="class "hs-sp([(In /nno; [Event ControlMap] forall a b. (a -> b) -> a -> b >22222pan>222/span> =5,,,= = = s="hs-numbelass="annot">7777777777773962number">7[,,==span> <*1pan>= = s="hs-numbelass="annot">77777777whole' :: [a] [0,3,/span> =5,,,,,,7 n class="hs-identi494">instance whole' :: [a] 9 n class="hs-identi494">instance whole' :: [a] 9[0=,n class="hs-identifier hs-type"> class="class "hs-specialclass="hs-special">, class=",1<>> class="<(a -> b) -> a -> b $ EventF Arc t -&ten>5an class="hs-identifier hs class="hs-number">57/span>whole' :: [a] 9$ class="annot">augmented2 :: Fractionalan class="hs-identifier hs class="hs-number">57.span>Fractionalan class="hs-identifier hs class="hs-number">57.span>57.span>57.span>57.span>57.span>< clas-special">, class=",1<>> class=",gt; b) -> a -> b 57.s21679151l">>>2> class="class "hs-sp([(In /ber">2257.span>whole' :: [a] class=",gt; b) -> a -> b 57.s21679151l">> 2> class="class "hs-sp([(In /ber">2="local-6989586621679148318">pelog :: [0,35 classype">an class=an>$ EventF Arc t -&ten>52(scalen class=an>257.span>,EventF Arc t - class="hs-p/s(a -> b) -> a> ="annot">whole' :: [a] whole' :: [a] hexAeolian5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>5>>5a9:: Fractional $ :: EventF Arc t - class="hs-p/s(a -> b) -> a> ="annot">whole' :: [a] whole' :: [a] EventF Arc t - class="hs-p/s(anot">5aspecial">,gt; b) -> a -> b 5ntF Arc t - class="hs-p/s(anot">53<> $ 57.span> ,gt; b) -> a -> b ,gt; b) -> a -> b 57.span> ,gt; b) -> a -> b ,q/span>,gt; a -> b 57.span> whole' :: [a] 9>= ,gt; b) -> a ->(32span9 ,gt; bsp([(In /span>,gt; b) -> a ->(32span9,gt; b) -> a ->(32span9Dhref="