-- Copyright 2013 Evan Laforge
-- This program is distributed under the terms of the GNU General Public
-- License 3.0, see COPYING or http://www.gnu.org/licenses/gpl-3.0.txt

-- | Symbolic names for all the MIDI keys.
--
-- This is the 'Pitch.NoteNumber' version of "Midi.Key".
module Perform.NN where
import qualified Perform.Pitch as Pitch
import Global


NoteNumber
c_1 : NoteNumber
cs_1 : NoteNumber
d_1 : NoteNumber
ds_1 : NoteNumber
e_1 : NoteNumber
f_1 : NoteNumber
fs_1 : NoteNumber
g_1 : NoteNumber
gs_1 : NoteNumber
a_1 : NoteNumber
as_1 : NoteNumber
b_1
    : NoteNumber
c0 : NoteNumber
cs0 : NoteNumber
d0 : NoteNumber
ds0 : NoteNumber
e0 : NoteNumber
f0 : NoteNumber
fs0 : NoteNumber
g0 : NoteNumber
gs0 : NoteNumber
a0 : NoteNumber
as0 : NoteNumber
b0
    : NoteNumber
c1 : NoteNumber
cs1 : NoteNumber
d1 : NoteNumber
ds1 : NoteNumber
e1 : NoteNumber
f1 : NoteNumber
fs1 : NoteNumber
g1 : NoteNumber
gs1 : NoteNumber
a1 : NoteNumber
as1 : NoteNumber
b1
    : NoteNumber
c2 : NoteNumber
cs2 : NoteNumber
d2 : NoteNumber
ds2 : NoteNumber
e2 : NoteNumber
f2 : NoteNumber
fs2 : NoteNumber
g2 : NoteNumber
gs2 : NoteNumber
a2 : NoteNumber
as2 : NoteNumber
b2
    : NoteNumber
c3 : NoteNumber
cs3 : NoteNumber
d3 : NoteNumber
ds3 : NoteNumber
e3 : NoteNumber
f3 : NoteNumber
fs3 : NoteNumber
g3 : NoteNumber
gs3 : NoteNumber
a3 : NoteNumber
as3 : NoteNumber
b3
    : NoteNumber
c4 : NoteNumber
cs4 : NoteNumber
d4 : NoteNumber
ds4 : NoteNumber
e4 : NoteNumber
f4 : NoteNumber
fs4 : NoteNumber
g4 : NoteNumber
gs4 : NoteNumber
a4 : NoteNumber
as4 : NoteNumber
b4
    : NoteNumber
c5 : NoteNumber
cs5 : NoteNumber
d5 : NoteNumber
ds5 : NoteNumber
e5 : NoteNumber
f5 : NoteNumber
fs5 : NoteNumber
g5 : NoteNumber
gs5 : NoteNumber
a5 : NoteNumber
as5 : NoteNumber
b5
    : NoteNumber
c6 : NoteNumber
cs6 : NoteNumber
d6 : NoteNumber
ds6 : NoteNumber
e6 : NoteNumber
f6 : NoteNumber
fs6 : NoteNumber
g6 : NoteNumber
gs6 : NoteNumber
a6 : NoteNumber
as6 : NoteNumber
b6
    : NoteNumber
c7 : NoteNumber
cs7 : NoteNumber
d7 : NoteNumber
ds7 : NoteNumber
e7 : NoteNumber
f7 : NoteNumber
fs7 : NoteNumber
g7 : NoteNumber
gs7 : NoteNumber
a7 : NoteNumber
as7 : NoteNumber
b7
    : NoteNumber
c8 : NoteNumber
cs8 : NoteNumber
d8 : NoteNumber
ds8 : NoteNumber
e8 : NoteNumber
f8 : NoteNumber
fs8 : NoteNumber
g8 : NoteNumber
gs8 : NoteNumber
a8 : NoteNumber
as8 : NoteNumber
b8
    : NoteNumber
c9 : NoteNumber
cs9 : NoteNumber
d9 : NoteNumber
ds9 : NoteNumber
e9 : NoteNumber
f9 : NoteNumber
fs9 : NoteNumber
g9
    : [NoteNumber]
_ = forall a b. (a -> b) -> [a] -> [b]
map Double -> NoteNumber
Pitch.NoteNumber [Double
0..]

middle_c :: Pitch.NoteNumber
middle_c :: NoteNumber
middle_c = NoteNumber
c4

name :: Pitch.NoteNumber -> Text
name :: NoteNumber -> Text
name NoteNumber
nn = Text
note forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> Text
showt (Int
oct forall a. Num a => a -> a -> a
- Int
1)
    where
    (Int
oct, Int
k) = (forall a b. (RealFrac a, Integral b) => a -> b
round NoteNumber
nn :: Int) forall a. Integral a => a -> a -> (a, a)
`divMod` Int
12
    note :: Text
note = case Int
k of
        Int
0 -> Text
"c"; Int
1 -> Text
"cs"
        Int
2 -> Text
"d"; Int
3 -> Text
"ds"
        Int
4 -> Text
"e"
        Int
5 -> Text
"f"; Int
6 -> Text
"fs"
        Int
7 -> Text
"g"; Int
8 -> Text
"gs"
        Int
9 -> Text
"a"; Int
10 -> Text
"as"
        Int
11 -> Text
"b"
        Int
_ -> Text
""

karya_name :: Pitch.NoteNumber -> Text
karya_name :: NoteNumber -> Text
karya_name NoteNumber
nn = forall a. Show a => a -> Text
showt (Int
oct forall a. Num a => a -> a -> a
- Int
1) forall a. Semigroup a => a -> a -> a
<> Text
note
    where
    (Int
oct, Int
k) = (forall a b. (RealFrac a, Integral b) => a -> b
round NoteNumber
nn :: Int) forall a. Integral a => a -> a -> (a, a)
`divMod` Int
12
    note :: Text
note = case Int
k of
        Int
0 -> Text
"c"; Int
1 -> Text
"c#"
        Int
2 -> Text
"d"; Int
3 -> Text
"d#"
        Int
4 -> Text
"e"
        Int
5 -> Text
"f"; Int
6 -> Text
"f#"
        Int
7 -> Text
"g"; Int
8 -> Text
"g#"
        Int
9 -> Text
"a"; Int
10 -> Text
"a#"
        Int
11 -> Text
"b"
        Int
_ -> Text
""