module Pattern where

import Pitch
import Midi
import List
import Prelude ( Int, (*), ($) )


main, voice :: [Event (Channel Message)] ;
main :: [Event (Channel Message)]
main = [Event (Channel Message)]
voice ;

en, qn, hn :: Time ;
en :: Time
en = Time
200 ;
qn :: Time
qn = Time
2 Time -> Time -> Time
forall a. Num a => a -> a -> a
* Time
en ;
hn :: Time
hn = Time
2 Time -> Time -> Time
forall a. Num a => a -> a -> a
* Time
qn ;

harmonies :: [[Pitch]] ;
harmonies :: [[Time]]
harmonies =
    [ Time -> Time
c Time
4, Time -> Time
e Time
4, Time -> Time
g Time
4, Time -> Time
c Time
5 ] [Time] -> [[Time]] -> [[Time]]
forall a. a -> [a] -> [a]
:
    [ Time -> Time
d Time
4, Time -> Time
f Time
4, Time -> Time
a Time
4, Time -> Time
c Time
5 ] [Time] -> [[Time]] -> [[Time]]
forall a. a -> [a] -> [a]
:
    [ Time -> Time
b Time
3, Time -> Time
d Time
4, Time -> Time
g Time
4, Time -> Time
b Time
4 ] [Time] -> [[Time]] -> [[Time]]
forall a. a -> [a] -> [a]
:
    [ Time -> Time
c Time
4, Time -> Time
e Time
4, Time -> Time
g Time
4, Time -> Time
c Time
5 ] [Time] -> [[Time]] -> [[Time]]
forall a. a -> [a] -> [a]
:
    [];

pattern :: [ Int ] ;
pattern :: [Int]
pattern = [Int
0, Int
1, Int
2, Int
1, Int
2, Int
3, Int
2, Int
1] ;

voice :: [Event (Channel Message)]
voice =
    Time -> [Event Message] -> [Event (Channel Message)]
forall a. Time -> [Event a] -> [Event (Channel a)]
channel Time
0 (Time -> [Event Message]
program Time
0 [Event Message] -> [Event Message] -> [Event Message]
forall a. [a] -> [a] -> [a]
++
        (Time -> [Event Message]) -> [Time] -> [Event Message]
forall a b. (a -> [b]) -> [a] -> [b]
concatMap ( Time -> Time -> [Event Message]
note Time
en ) (
            ([Time] -> Int -> Time) -> [[Time]] -> [Int] -> [Time]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith [Time] -> Int -> Time
forall a. [a] -> Int -> a
index
                ( ([Time] -> [[Time]]) -> [[Time]] -> [[Time]]
forall a b. (a -> [b]) -> [a] -> [b]
concatMap ( Int -> [Time] -> [[Time]]
forall a. Int -> a -> [a]
replicate Int
8 ) ([[Time]] -> [[Time]]) -> [[Time]] -> [[Time]]
forall a b. (a -> b) -> a -> b
$
                  [[Time]] -> [[Time]]
forall a. [a] -> [a]
cycle [[Time]]
harmonies )
                ( [Int] -> [Int]
forall a. [a] -> [a]
cycle [Int]
pattern )
        ) ) ;

index :: [a] -> Int -> a ;
index :: forall a. [a] -> Int -> a
index [a]
xs Int
n = [a]
xs [a] -> Int -> a
forall a. [a] -> Int -> a
!! Int
n ;