packages feed

midi-music-box-0.0.1: src/Note.hs

module Note where

pitch :: Char -> Int -> Int -> (Char, Int)
pitch char nt oct = (char, nt+oct*12)

c,d,e,f,g,a,b :: Int -> (Char, Int)
c = pitch 'C'  0
d = pitch 'D'  2
e = pitch 'E'  4
f = pitch 'F'  5
g = pitch 'G'  7
a = pitch 'A'  9
b = pitch 'B' 11

(#) :: (a -> (Char, Int)) -> a -> (Char, Int)
noteFunc # oct = ('#', succ $ snd $ noteFunc oct)


infixr 5 .:, |:

(.:), (|:) :: a -> [(Bool, a)] -> [(Bool, a)]
x .: xs  = (False,x) : xs
x |: xs  = (True, x) : xs


pitches15, pitches30 :: [(Bool, (Char, Int))]
pitches15 =
   c 0 .: d 0 .: e 0 |: f 0 .: g 0 |: a 0 .: b 0 |:
   c 1 .: d 1 |: e 1 .: f 1 |: g 1 .: a 1 .: b 1 .:
   c 2 .: []

pitches30 =
   c 0 .: d 0 .: g 0 .: a 0 .: b 0 .:
   c 1 .: d 1 .: e 1 |:
   f 1 .: f#1 .: g 1 |: g#1 .: a 1 .: a#1 .: b 1 |:
   c 2 .: c#2 .: d 2 |: d#2 .: e 2 .:
   f 2 |: f#2 .: g 2 .: g#2 .: a 2 .: a#2 .: b 2 .:
   c 3 .: d 3 .: e 3 .:
   []