module Chord where

import Midi
import Pitch ( Pitch )


chord ::
   Time -> [Pitch] ->
   [Midi.Event Midi.Message] ;
chord :: Pitch -> [Pitch] -> [Event Message]
chord Pitch
dur =
   [[Event Message]] -> [Event Message]
forall a. [[Event a]] -> [Event a]
mergeMany ([[Event Message]] -> [Event Message])
-> ([Pitch] -> [[Event Message]]) -> [Pitch] -> [Event Message]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Pitch -> [Event Message]) -> [Pitch] -> [[Event Message]]
forall a b. (a -> b) -> [a] -> [b]
map (Pitch -> Pitch -> [Event Message]
note Pitch
dur) ;


chord3 ::
   Time ->
   Pitch -> Pitch -> Pitch ->
   [Midi.Event Midi.Message] ;
chord3 :: Pitch -> Pitch -> Pitch -> Pitch -> [Event Message]
chord3 Pitch
dur Pitch
p0 Pitch
p1 Pitch
p2 = Pitch -> [Pitch] -> [Event Message]
chord Pitch
dur [Pitch
p0, Pitch
p1, Pitch
p2] ;

chord4 ::
   Time ->
   Pitch -> Pitch -> Pitch -> Pitch ->
   [Midi.Event Midi.Message] ;
chord4 :: Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message]
chord4 Pitch
dur Pitch
p0 Pitch
p1 Pitch
p2 Pitch
p3 = Pitch -> [Pitch] -> [Event Message]
chord Pitch
dur [Pitch
p0, Pitch
p1, Pitch
p2, Pitch
p3] ;


major, major7, minor, minor7 ::
   Time -> Pitch -> [Midi.Event Midi.Message] ;

major :: Pitch -> Pitch -> [Event Message]
major Pitch
dur Pitch
base =
   Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message]
chord4 Pitch
dur Pitch
base (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
4) (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
7) (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
12) ;

major7 :: Pitch -> Pitch -> [Event Message]
major7 Pitch
dur Pitch
base =
   Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message]
chord4 Pitch
dur Pitch
base (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
4) (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
7) (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
10) ;

minor :: Pitch -> Pitch -> [Event Message]
minor Pitch
dur Pitch
base =
   Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message]
chord4 Pitch
dur Pitch
base (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
3) (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
7) (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
12) ;

minor7 :: Pitch -> Pitch -> [Event Message]
minor7 Pitch
dur Pitch
base =
   Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message]
chord4 Pitch
dur Pitch
base (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
3) (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
7) (Pitch
base Pitch -> Pitch -> Pitch
forall a. Num a => a -> a -> a
+ Pitch
10) ;