-- | Csound pitch constants
module CsoundExpr.Base.Pitch
(Pch, Oct,
c, cs, d, ds, e, es, f, fs, g, gs, a, as, b, bs,
cb, db, eb, fb, gb, ab, bb,
css, dss, ess, fss, gss, ass, bss,
cbb, dbb, ebb, fbb, gbb, abb, bbb)
where
import CsoundExpr.Base
type Pch = Irate
type Oct = Int
-- natural, sharps
c, cs, d, ds, e, es, f, fs, g, gs, a, as, b, bs :: Oct -> Pch
c = inDouble (8.00 + )
cs = inDouble (8.01 + )
d = inDouble (8.02 + )
ds = inDouble (8.03 + )
e = inDouble (8.04 + )
f = inDouble (8.05 + )
fs = inDouble (8.06 + )
g = inDouble (8.07 + )
gs = inDouble (8.08 + )
a = inDouble (8.09 + )
as = inDouble (8.10 + )
b = inDouble (8.11 + )
inDouble :: (Double -> Double) -> Oct -> Pch
inDouble f = fromDouble . f . toDouble
where toDouble = fromInteger . toInteger
fromDouble = fromRational . toRational
es = f
bs = c . (+1)
-- flats
cb, db, eb, fb, gb, ab, bb :: Oct -> Pch
cb = b . (\x -> x - 1)
db = cs
eb = ds
fb = e
gb = fs
ab = gs
bb = as
-- double sharps
css, dss, ess, fss, gss, ass, bss :: Oct -> Pch
css = d
dss = e
ess = fs
fss = g
gss = a
ass = b
bss = cs . (+1)
-- double flats
cbb, dbb, ebb, fbb, gbb, abb, bbb :: Oct -> Pch
cbb = bb . (\x -> x - 1)
dbb = c
ebb = d
fbb = eb
gbb = f
abb = g
bbb = a