module Drum where

import Midi ( Event, Time, Message, Channel, note, channel )


type Drum = Integer ;

drum :: Drum -> Time -> [Event Message] ;
drum kind dur = note dur kind ;

drumChannel :: [Event a] -> [Event (Channel a)] ;
drumChannel = channel 9 ;

acousticBassDrum, bassDrum1, sideStick, acousticSnare, 
  handClap, electricSnare, lowFloorTom, closedHiHat, 
  highFloorTom, pedalHiHat, lowTom, openHiHat, 
  lowMidTom, hiMidTom, crashCymbal1, highTom, 
  rideCymbal1, chineseCymbal, rideBell, tambourine, 
  splashCymbal, cowbell, crashCymbal2, vibraslap, 
  rideCymbal2, hiBongo, lowBongo, muteHiConga, 
  openHiConga, lowConga, highTimbale, lowTimbale, 
  highAgogo, lowAgogo, cabasa, maracas, 
  shortWhistle, longWhistle, shortGuiro, longGuiro, 
  claves, hiWoodBlock, lowWoodBlock, muteCuica, 
  openCuica, muteTriangle, openTriangle :: Drum ;


-- general MIDI drum aliases

acousticBassDrum = 35 ;
bassDrum1        = 36 ;
sideStick        = 37 ;
acousticSnare    = 38 ;
handClap         = 39 ;
electricSnare    = 40 ;
lowFloorTom      = 41 ;
closedHiHat      = 42 ;
highFloorTom     = 43 ;
pedalHiHat       = 44 ;
lowTom           = 45 ;
openHiHat        = 46 ;
lowMidTom        = 47 ;
hiMidTom         = 48 ;
crashCymbal1     = 49 ;
highTom          = 50 ;
rideCymbal1      = 51 ;
chineseCymbal    = 52 ;
rideBell         = 53 ;
tambourine       = 54 ;
splashCymbal     = 55 ;
cowbell          = 56 ;
crashCymbal2     = 57 ;
vibraslap        = 58 ;
rideCymbal2      = 59 ;
hiBongo          = 60 ;
lowBongo         = 61 ;
muteHiConga      = 62 ;
openHiConga      = 63 ;
lowConga         = 64 ;
highTimbale      = 65 ;
lowTimbale       = 66 ;
highAgogo        = 67 ;
lowAgogo         = 68 ;
cabasa           = 69 ;
maracas          = 70 ;
shortWhistle     = 71 ;
longWhistle      = 72 ;
shortGuiro       = 73 ;
longGuiro        = 74 ;
claves           = 75 ;
hiWoodBlock      = 76 ;
lowWoodBlock     = 77 ;
muteCuica        = 78 ;
openCuica        = 79 ;
muteTriangle     = 80 ;
openTriangle     = 81 ;