module Pitch where

import Prelude ( Integer, (+), (-), (*) )


type Pitch = Integer ;
type Octave = Integer ;
type Class = Integer ;

{- cf.
http://en.wikipedia.org/wiki/Scientific_pitch_notation
http://en.wikipedia.org/wiki/MIDI_Tuning_Standard
-}
pitch :: Class -> Octave -> Pitch ;
pitch :: Pitch -> Pitch -> Pitch
pitch Pitch
cls Pitch
octave = Pitch
cls Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ (Pitch
octavePitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+Pitch
1)Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
*Pitch
12 ;

cb, db, eb, fb, gb, ab, bb :: Class ;

c, cis, ces, cs, cf,
  d, dis, des, ds, df,
  e, eis, ees, es, ef,
  f, fis, fes, fs, ff,
  g, gis, ges, gs, gf,
  a, ais, aes, as, af,
  b, bis, bes, bs, bf :: Octave -> Pitch ;

cb :: Pitch
cb =  Pitch
0 ; c :: Pitch -> Pitch
c = Pitch -> Pitch -> Pitch
pitch Pitch
cb ; cis :: Pitch -> Pitch
cis = Pitch -> Pitch
cs ; ces :: Pitch -> Pitch
ces = Pitch -> Pitch
cf ;
db :: Pitch
db =  Pitch
2 ; d :: Pitch -> Pitch
d = Pitch -> Pitch -> Pitch
pitch Pitch
db ; dis :: Pitch -> Pitch
dis = Pitch -> Pitch
ds ; des :: Pitch -> Pitch
des = Pitch -> Pitch
df ;
eb :: Pitch
eb =  Pitch
4 ; e :: Pitch -> Pitch
e = Pitch -> Pitch -> Pitch
pitch Pitch
eb ; eis :: Pitch -> Pitch
eis = Pitch -> Pitch
es ; ees :: Pitch -> Pitch
ees = Pitch -> Pitch
ef ;
fb :: Pitch
fb =  Pitch
5 ; f :: Pitch -> Pitch
f = Pitch -> Pitch -> Pitch
pitch Pitch
fb ; fis :: Pitch -> Pitch
fis = Pitch -> Pitch
fs ; fes :: Pitch -> Pitch
fes = Pitch -> Pitch
ff ;
gb :: Pitch
gb =  Pitch
7 ; g :: Pitch -> Pitch
g = Pitch -> Pitch -> Pitch
pitch Pitch
gb ; gis :: Pitch -> Pitch
gis = Pitch -> Pitch
gs ; ges :: Pitch -> Pitch
ges = Pitch -> Pitch
gf ;
ab :: Pitch
ab =  Pitch
9 ; a :: Pitch -> Pitch
a = Pitch -> Pitch -> Pitch
pitch Pitch
ab ; ais :: Pitch -> Pitch
ais = Pitch -> Pitch
as ; aes :: Pitch -> Pitch
aes = Pitch -> Pitch
af ;
bb :: Pitch
bb = Pitch
11 ; b :: Pitch -> Pitch
b = Pitch -> Pitch -> Pitch
pitch Pitch
bb ; bis :: Pitch -> Pitch
bis = Pitch -> Pitch
bs ; bes :: Pitch -> Pitch
bes = Pitch -> Pitch
bf ;

cs :: Pitch -> Pitch
cs = Pitch -> Pitch -> Pitch
pitch (Pitch
cbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+Pitch
1) ; cf :: Pitch -> Pitch
cf = Pitch -> Pitch -> Pitch
pitch (Pitch
cbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
-Pitch
1) ;
ds :: Pitch -> Pitch
ds = Pitch -> Pitch -> Pitch
pitch (Pitch
dbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+Pitch
1) ; df :: Pitch -> Pitch
df = Pitch -> Pitch -> Pitch
pitch (Pitch
dbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
-Pitch
1) ;
es :: Pitch -> Pitch
es = Pitch -> Pitch -> Pitch
pitch (Pitch
ebPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+Pitch
1) ; ef :: Pitch -> Pitch
ef = Pitch -> Pitch -> Pitch
pitch (Pitch
ebPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
-Pitch
1) ;
fs :: Pitch -> Pitch
fs = Pitch -> Pitch -> Pitch
pitch (Pitch
fbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+Pitch
1) ; ff :: Pitch -> Pitch
ff = Pitch -> Pitch -> Pitch
pitch (Pitch
fbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
-Pitch
1) ;
gs :: Pitch -> Pitch
gs = Pitch -> Pitch -> Pitch
pitch (Pitch
gbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+Pitch
1) ; gf :: Pitch -> Pitch
gf = Pitch -> Pitch -> Pitch
pitch (Pitch
gbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
-Pitch
1) ;
as :: Pitch -> Pitch
as = Pitch -> Pitch -> Pitch
pitch (Pitch
abPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+Pitch
1) ; af :: Pitch -> Pitch
af = Pitch -> Pitch -> Pitch
pitch (Pitch
abPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
-Pitch
1) ;
bs :: Pitch -> Pitch
bs = Pitch -> Pitch -> Pitch
pitch (Pitch
bbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+Pitch
1) ; bf :: Pitch -> Pitch
bf = Pitch -> Pitch -> Pitch
pitch (Pitch
bbPitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
-Pitch
1) ;