module Bang.Interface.Base where
import Bang.Music.Class
import Data.Monoid
import Data.Ratio
rest :: Dur -> Music Dur a
rest d = Prim (Rest d)
note :: Dur -> a -> Music Dur a
note d x = Prim (Note d x)
bpm :: Integer -> Music a b -> Music a b
bpm n = Modify (BPM n)
tempo :: Rational -> Music a b -> Music a b
tempo n = Modify (Tempo (1/n))
ts :: Rational -> Rational -> Music a b -> Music a b
ts n d = Modify (Tempo (d/n))
quad :: Music a b -> Music a b
quad = tempo 4
double :: Music a b -> Music a b
double = tempo 2
normal :: Music a b -> Music a b
normal = tempo 1
half :: Music a b -> Music a b
half = tempo (1/2)
quarter :: Music a b -> Music a b
quarter = tempo (1/4)
tuplets :: Rational -> Music a b -> Music a b
tuplets n = tempo (n/4)
triplets :: Music a b -> Music a b
triplets = tuplets 3
quintuplets :: Music a b -> Music a b
quintuplets = tuplets 5
sr :: Music Dur a
sr = rest (1/16)
er :: Music Dur a
er = rest (1/8)
qr :: Music Dur a
qr = rest (1/4)
hr :: Music Dur a
hr = rest (1/2)
wr :: Music Dur a
wr = rest 1
dots :: Int -> Dur
dots n = 2 (1 / (2 ^ n))
dottedRest :: Int -> Dur -> Music Dur a
dottedRest n d = rest (d * (dots n))
dr :: Int -> Dur -> Music Dur a
dr = dottedRest
oneDotRest :: Dur -> Music Dur a
oneDotRest = dottedRest 1
edr :: Music Dur a
edr = oneDotRest (1/8)
qdr :: Music Dur a
qdr = oneDotRest (1/4)
hdr :: Music Dur a
hdr = oneDotRest (1/2)
wdr :: Music Dur a
wdr = oneDotRest 1
m2 :: Monoid a => a -> a -> a
m2 a b = a <> b
m3 :: Monoid a => a -> a -> a -> a
m3 a b c = mconcat [a, b, c]
m4 :: Monoid a => a -> a -> a -> a -> a
m4 a b c d = mconcat [a, b, c, d]
m5 :: Monoid a => a -> a -> a -> a -> a -> a
m5 a b c d e = mconcat [a, b, c, d, e]
m6 :: Monoid a => a -> a -> a -> a -> a -> a -> a
m6 a b c d e f = mconcat [a, b, c, d, e, f]
m7 :: Monoid a => a -> a -> a -> a -> a -> a -> a -> a
m7 a b c d e f g = mconcat [a, b, c, d, e, f, g]
m8 :: Monoid a => a -> a -> a -> a -> a -> a -> a -> a -> a
m8 a b c d e f g h = mconcat [a, b, c, d, e, f, g, h]
m9 :: Monoid a => a -> a -> a -> a -> a -> a -> a -> a -> a -> a
m9 a b c d e f g h i = mconcat [a, b, c, d, e, f, g, h, i]
m10 :: Monoid a => a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a
m10 a b c d e f g h i j = mconcat [a, b, c, d, e, f, g, h, i, j]
m11 :: Monoid a => a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a
m11 a b c d e f g h i j k = mconcat [a, b, c, d, e, f, g, h, i, j, k]
m12 :: Monoid a => a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a -> a
m12 a b c d e f g h i j k l = mconcat [a, b, c, d, e, f, g, h, i, j, k, l]
c2 :: Num d => Music d a -> Music d a -> Music d a
c2 a b = a <> b
c3 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
c3 a b c = cconcat [a, b, c]
c4 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
-> Music d a
c4 a b c d = cconcat [a, b, c, d]
c5 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a
c5 a b c d e = cconcat [a, b, c, d, e]
c6 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a
c6 a b c d e f = cconcat [a, b, c, d, e, f]
c7 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a -> Music d a
c7 a b c d e f g = cconcat [a, b, c, d, e, f, g]
c8 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a -> Music d a
-> Music d a
c8 a b c d e f g h = cconcat [a, b, c, d, e, f, g, h]
c9 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a
c9 a b c d e f g h i = cconcat [a, b, c, d, e, f, g, h, i]
c10 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a
c10 a b c d e f g h i j = cconcat [a, b, c, d, e, f, g, h, i, j]
c11 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a -> Music d a
c11 a b c d e f g h i j k = cconcat [a, b, c, d, e, f, g, h, i, j, k]
c12 :: Num d => Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a -> Music d a
-> Music d a -> Music d a -> Music d a -> Music d a
-> Music d a
c12 a b c d e f g h i j k l = cconcat [a, b, c, d, e, f, g, h, i, j, k, l]