This file is indexed.

/usr/share/doc/libghc-midi-doc/html/src/Sound-MIDI-General.html is in libghc-midi-doc 0.1.7.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>src/Sound/MIDI/General.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{- |
<a name="line-2"></a>General-MIDI definitions.
<a name="line-3"></a>
<a name="line-4"></a>Taken from Haskore.
<a name="line-5"></a>-}</span>
<a name="line-6"></a>
<a name="line-7"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Sound</span><span class='hs-varop'>.</span><span class='hs-conid'>MIDI</span><span class='hs-varop'>.</span><span class='hs-conid'>General</span> <span class='hs-keyword'>where</span>
<a name="line-8"></a>
<a name="line-9"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Sound</span><span class='hs-varop'>.</span><span class='hs-conid'>MIDI</span><span class='hs-varop'>.</span><span class='hs-conid'>Message</span><span class='hs-varop'>.</span><span class='hs-conid'>Channel</span><span class='hs-varop'>.</span><span class='hs-conid'>Voice</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>VoiceMsg</span>
<a name="line-10"></a><span class='hs-keyword'>import</span>           <span class='hs-conid'>Sound</span><span class='hs-varop'>.</span><span class='hs-conid'>MIDI</span><span class='hs-varop'>.</span><span class='hs-conid'>Message</span><span class='hs-varop'>.</span><span class='hs-conid'>Channel</span> <span class='hs-layout'>(</span><span class='hs-conid'>Channel</span><span class='hs-layout'>,</span> <span class='hs-varid'>toChannel</span><span class='hs-layout'>,</span> <span class='hs-layout'>)</span>
<a name="line-11"></a><span class='hs-keyword'>import</span>           <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Ix</span><span class='hs-layout'>(</span><span class='hs-conid'>Ix</span><span class='hs-layout'>)</span>
<a name="line-12"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>List</span>
<a name="line-13"></a>
<a name="line-14"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Sound</span><span class='hs-varop'>.</span><span class='hs-conid'>MIDI</span><span class='hs-varop'>.</span><span class='hs-conid'>Utility</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapSnd</span><span class='hs-layout'>,</span>
<a name="line-15"></a>          <span class='hs-varid'>enumRandomR</span><span class='hs-layout'>,</span> <span class='hs-varid'>boundedEnumRandom</span><span class='hs-layout'>,</span> <span class='hs-varid'>chooseEnum</span><span class='hs-layout'>,</span> <span class='hs-layout'>)</span>
<a name="line-16"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Test</span><span class='hs-varop'>.</span><span class='hs-conid'>QuickCheck</span> <span class='hs-layout'>(</span><span class='hs-conid'>Arbitrary</span><span class='hs-layout'>(</span><span class='hs-varid'>arbitrary</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>)</span>
<a name="line-17"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Random</span> <span class='hs-layout'>(</span><span class='hs-conid'>Random</span><span class='hs-layout'>(</span><span class='hs-varid'>random</span><span class='hs-layout'>,</span><span class='hs-varid'>randomR</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>)</span>
<a name="line-18"></a>
<a name="line-19"></a>
<a name="line-20"></a><span class='hs-comment'>{- * Instrument definitions -}</span>
<a name="line-21"></a>
<a name="line-22"></a><a name="instrumentNameToProgram"></a><span class='hs-definition'>instrumentNameToProgram</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-conid'>Program</span>
<a name="line-23"></a><span class='hs-definition'>instrumentNameToProgram</span> <span class='hs-keyglyph'>=</span>
<a name="line-24"></a>   <span class='hs-varid'>fmap</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-varid'>toProgram</span> <span class='hs-varop'>.</span> <span class='hs-varid'>flip</span> <span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-varid'>elemIndex</span> <span class='hs-varid'>instrumentNames</span>
<a name="line-25"></a>
<a name="line-26"></a><a name="instrumentNames"></a><span class='hs-definition'>instrumentNames</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-27"></a><span class='hs-definition'>instrumentNames</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>map</span> <span class='hs-varid'>fst</span> <span class='hs-varid'>instrumentPrograms</span>
<a name="line-28"></a>
<a name="line-29"></a><a name="instrumentPrograms"></a><span class='hs-definition'>instrumentPrograms</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>String</span><span class='hs-layout'>,</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-conid'>Program</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-30"></a><span class='hs-definition'>instrumentPrograms</span> <span class='hs-keyglyph'>=</span>
<a name="line-31"></a>   <span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapSnd</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-varid'>toProgram</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>[</span>
<a name="line-32"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Acoustic Grand Piano"</span><span class='hs-layout'>,</span><span class='hs-num'>0</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>       <span class='hs-layout'>(</span><span class='hs-str'>"Bright Acoustic Piano"</span><span class='hs-layout'>,</span><span class='hs-num'>1</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-33"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Electric Grand Piano"</span><span class='hs-layout'>,</span><span class='hs-num'>2</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>       <span class='hs-layout'>(</span><span class='hs-str'>"Honky Tonk Piano"</span><span class='hs-layout'>,</span><span class='hs-num'>3</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-34"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Rhodes Piano"</span><span class='hs-layout'>,</span><span class='hs-num'>4</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>               <span class='hs-layout'>(</span><span class='hs-str'>"Chorused Piano"</span><span class='hs-layout'>,</span><span class='hs-num'>5</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-35"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Harpsichord"</span><span class='hs-layout'>,</span><span class='hs-num'>6</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                <span class='hs-layout'>(</span><span class='hs-str'>"Clavinet"</span><span class='hs-layout'>,</span><span class='hs-num'>7</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-36"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Celesta"</span><span class='hs-layout'>,</span><span class='hs-num'>8</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                    <span class='hs-layout'>(</span><span class='hs-str'>"Glockenspiel"</span><span class='hs-layout'>,</span><span class='hs-num'>9</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-37"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Music Box"</span><span class='hs-layout'>,</span><span class='hs-num'>10</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                 <span class='hs-layout'>(</span><span class='hs-str'>"Vibraphone"</span><span class='hs-layout'>,</span><span class='hs-num'>11</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-38"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Marimba"</span><span class='hs-layout'>,</span><span class='hs-num'>12</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                   <span class='hs-layout'>(</span><span class='hs-str'>"Xylophone"</span><span class='hs-layout'>,</span><span class='hs-num'>13</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-39"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Tubular Bells"</span><span class='hs-layout'>,</span><span class='hs-num'>14</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>             <span class='hs-layout'>(</span><span class='hs-str'>"Dulcimer"</span><span class='hs-layout'>,</span><span class='hs-num'>15</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-40"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Hammond Organ"</span><span class='hs-layout'>,</span><span class='hs-num'>16</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>             <span class='hs-layout'>(</span><span class='hs-str'>"Percussive Organ"</span><span class='hs-layout'>,</span><span class='hs-num'>17</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-41"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Rock Organ"</span><span class='hs-layout'>,</span><span class='hs-num'>18</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                <span class='hs-layout'>(</span><span class='hs-str'>"Church Organ"</span><span class='hs-layout'>,</span><span class='hs-num'>19</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-42"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Reed Organ"</span><span class='hs-layout'>,</span><span class='hs-num'>20</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                <span class='hs-layout'>(</span><span class='hs-str'>"Accordion"</span><span class='hs-layout'>,</span><span class='hs-num'>21</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-43"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Harmonica"</span><span class='hs-layout'>,</span><span class='hs-num'>22</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                 <span class='hs-layout'>(</span><span class='hs-str'>"Tango Accordion"</span><span class='hs-layout'>,</span><span class='hs-num'>23</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-44"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Acoustic Guitar (nylon)"</span><span class='hs-layout'>,</span><span class='hs-num'>24</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>   <span class='hs-layout'>(</span><span class='hs-str'>"Acoustic Guitar (steel)"</span><span class='hs-layout'>,</span><span class='hs-num'>25</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-45"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Electric Guitar (jazz)"</span><span class='hs-layout'>,</span><span class='hs-num'>26</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>    <span class='hs-layout'>(</span><span class='hs-str'>"Electric Guitar (clean)"</span><span class='hs-layout'>,</span><span class='hs-num'>27</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-46"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Electric Guitar (muted)"</span><span class='hs-layout'>,</span><span class='hs-num'>28</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>   <span class='hs-layout'>(</span><span class='hs-str'>"Overdriven Guitar"</span><span class='hs-layout'>,</span><span class='hs-num'>29</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-47"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Distortion Guitar"</span><span class='hs-layout'>,</span><span class='hs-num'>30</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>         <span class='hs-layout'>(</span><span class='hs-str'>"Guitar Harmonics"</span><span class='hs-layout'>,</span><span class='hs-num'>31</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-48"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Acoustic Bass"</span><span class='hs-layout'>,</span><span class='hs-num'>32</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>             <span class='hs-layout'>(</span><span class='hs-str'>"Electric Bass (fingered)"</span><span class='hs-layout'>,</span><span class='hs-num'>33</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-49"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Electric Bass (picked)"</span><span class='hs-layout'>,</span><span class='hs-num'>34</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>    <span class='hs-layout'>(</span><span class='hs-str'>"Fretless Bass"</span><span class='hs-layout'>,</span><span class='hs-num'>35</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-50"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Slap Bass 1"</span><span class='hs-layout'>,</span><span class='hs-num'>36</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>               <span class='hs-layout'>(</span><span class='hs-str'>"Slap Bass 2"</span><span class='hs-layout'>,</span><span class='hs-num'>37</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-51"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Synth Bass 1"</span><span class='hs-layout'>,</span><span class='hs-num'>38</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>              <span class='hs-layout'>(</span><span class='hs-str'>"Synth Bass 2"</span><span class='hs-layout'>,</span><span class='hs-num'>39</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-52"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Violin"</span><span class='hs-layout'>,</span><span class='hs-num'>40</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                    <span class='hs-layout'>(</span><span class='hs-str'>"Viola"</span><span class='hs-layout'>,</span><span class='hs-num'>41</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-53"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Cello"</span><span class='hs-layout'>,</span><span class='hs-num'>42</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                     <span class='hs-layout'>(</span><span class='hs-str'>"Contrabass"</span><span class='hs-layout'>,</span><span class='hs-num'>43</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-54"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Tremolo Strings"</span><span class='hs-layout'>,</span><span class='hs-num'>44</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>           <span class='hs-layout'>(</span><span class='hs-str'>"Pizzicato Strings"</span><span class='hs-layout'>,</span><span class='hs-num'>45</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-55"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Orchestral Harp"</span><span class='hs-layout'>,</span><span class='hs-num'>46</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>           <span class='hs-layout'>(</span><span class='hs-str'>"Timpani"</span><span class='hs-layout'>,</span><span class='hs-num'>47</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-56"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"String Ensemble 1"</span><span class='hs-layout'>,</span><span class='hs-num'>48</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>         <span class='hs-layout'>(</span><span class='hs-str'>"String Ensemble 2"</span><span class='hs-layout'>,</span><span class='hs-num'>49</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-57"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Synth Strings 1"</span><span class='hs-layout'>,</span><span class='hs-num'>50</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>           <span class='hs-layout'>(</span><span class='hs-str'>"Synth Strings 2"</span><span class='hs-layout'>,</span><span class='hs-num'>51</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-58"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Choir Aahs"</span><span class='hs-layout'>,</span><span class='hs-num'>52</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                <span class='hs-layout'>(</span><span class='hs-str'>"Voice Oohs"</span><span class='hs-layout'>,</span><span class='hs-num'>53</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-59"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Synth Voice"</span><span class='hs-layout'>,</span><span class='hs-num'>54</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>               <span class='hs-layout'>(</span><span class='hs-str'>"Orchestra Hit"</span><span class='hs-layout'>,</span><span class='hs-num'>55</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-60"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Trumpet"</span><span class='hs-layout'>,</span><span class='hs-num'>56</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                   <span class='hs-layout'>(</span><span class='hs-str'>"Trombone"</span><span class='hs-layout'>,</span><span class='hs-num'>57</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-61"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Tuba"</span><span class='hs-layout'>,</span><span class='hs-num'>58</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                      <span class='hs-layout'>(</span><span class='hs-str'>"Muted Trumpet"</span><span class='hs-layout'>,</span><span class='hs-num'>59</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-62"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"French Horn"</span><span class='hs-layout'>,</span><span class='hs-num'>60</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>               <span class='hs-layout'>(</span><span class='hs-str'>"Brass Section"</span><span class='hs-layout'>,</span><span class='hs-num'>61</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-63"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Synth Brass 1"</span><span class='hs-layout'>,</span><span class='hs-num'>62</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>             <span class='hs-layout'>(</span><span class='hs-str'>"Synth Brass 2"</span><span class='hs-layout'>,</span><span class='hs-num'>63</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-64"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Soprano Sax"</span><span class='hs-layout'>,</span><span class='hs-num'>64</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>               <span class='hs-layout'>(</span><span class='hs-str'>"Alto Sax"</span><span class='hs-layout'>,</span><span class='hs-num'>65</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-65"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Tenor Sax"</span><span class='hs-layout'>,</span><span class='hs-num'>66</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                 <span class='hs-layout'>(</span><span class='hs-str'>"Baritone Sax"</span><span class='hs-layout'>,</span><span class='hs-num'>67</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-66"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Oboe"</span><span class='hs-layout'>,</span><span class='hs-num'>68</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                      <span class='hs-layout'>(</span><span class='hs-str'>"Bassoon"</span><span class='hs-layout'>,</span><span class='hs-num'>69</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-67"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"English Horn"</span><span class='hs-layout'>,</span><span class='hs-num'>70</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>              <span class='hs-layout'>(</span><span class='hs-str'>"Clarinet"</span><span class='hs-layout'>,</span><span class='hs-num'>71</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-68"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Piccolo"</span><span class='hs-layout'>,</span><span class='hs-num'>72</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                   <span class='hs-layout'>(</span><span class='hs-str'>"Flute"</span><span class='hs-layout'>,</span><span class='hs-num'>73</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-69"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Recorder"</span><span class='hs-layout'>,</span><span class='hs-num'>74</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                  <span class='hs-layout'>(</span><span class='hs-str'>"Pan Flute"</span><span class='hs-layout'>,</span><span class='hs-num'>75</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-70"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Blown Bottle"</span><span class='hs-layout'>,</span><span class='hs-num'>76</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>              <span class='hs-layout'>(</span><span class='hs-str'>"Shakuhachi"</span><span class='hs-layout'>,</span><span class='hs-num'>77</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-71"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Whistle"</span><span class='hs-layout'>,</span><span class='hs-num'>78</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                   <span class='hs-layout'>(</span><span class='hs-str'>"Ocarina"</span><span class='hs-layout'>,</span><span class='hs-num'>79</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-72"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Lead 1 (square)"</span><span class='hs-layout'>,</span><span class='hs-num'>80</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>           <span class='hs-layout'>(</span><span class='hs-str'>"Lead 2 (sawtooth)"</span><span class='hs-layout'>,</span><span class='hs-num'>81</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-73"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Lead 3 (calliope)"</span><span class='hs-layout'>,</span><span class='hs-num'>82</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>         <span class='hs-layout'>(</span><span class='hs-str'>"Lead 4 (chiff)"</span><span class='hs-layout'>,</span><span class='hs-num'>83</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-74"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Lead 5 (charang)"</span><span class='hs-layout'>,</span><span class='hs-num'>84</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>          <span class='hs-layout'>(</span><span class='hs-str'>"Lead 6 (voice)"</span><span class='hs-layout'>,</span><span class='hs-num'>85</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-75"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Lead 7 (fifths)"</span><span class='hs-layout'>,</span><span class='hs-num'>86</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>           <span class='hs-layout'>(</span><span class='hs-str'>"Lead 8 (bass+lead)"</span><span class='hs-layout'>,</span><span class='hs-num'>87</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-76"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Pad 1 (new age)"</span><span class='hs-layout'>,</span><span class='hs-num'>88</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>           <span class='hs-layout'>(</span><span class='hs-str'>"Pad 2 (warm)"</span><span class='hs-layout'>,</span><span class='hs-num'>89</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-77"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Pad 3 (polysynth)"</span><span class='hs-layout'>,</span><span class='hs-num'>90</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>         <span class='hs-layout'>(</span><span class='hs-str'>"Pad 4 (choir)"</span><span class='hs-layout'>,</span><span class='hs-num'>91</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-78"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Pad 5 (bowed)"</span><span class='hs-layout'>,</span><span class='hs-num'>92</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>             <span class='hs-layout'>(</span><span class='hs-str'>"Pad 6 (metallic)"</span><span class='hs-layout'>,</span><span class='hs-num'>93</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-79"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Pad 7 (halo)"</span><span class='hs-layout'>,</span><span class='hs-num'>94</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>              <span class='hs-layout'>(</span><span class='hs-str'>"Pad 8 (sweep)"</span><span class='hs-layout'>,</span><span class='hs-num'>95</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-80"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"FX1 (train)"</span><span class='hs-layout'>,</span><span class='hs-num'>96</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>               <span class='hs-layout'>(</span><span class='hs-str'>"FX2 (soundtrack)"</span><span class='hs-layout'>,</span><span class='hs-num'>97</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-81"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"FX3 (crystal)"</span><span class='hs-layout'>,</span><span class='hs-num'>98</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>             <span class='hs-layout'>(</span><span class='hs-str'>"FX4 (atmosphere)"</span><span class='hs-layout'>,</span><span class='hs-num'>99</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-82"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"FX5 (brightness)"</span><span class='hs-layout'>,</span><span class='hs-num'>100</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>         <span class='hs-layout'>(</span><span class='hs-str'>"FX6 (goblins)"</span><span class='hs-layout'>,</span><span class='hs-num'>101</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-83"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"FX7 (echoes)"</span><span class='hs-layout'>,</span><span class='hs-num'>102</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>             <span class='hs-layout'>(</span><span class='hs-str'>"FX8 (sci-fi)"</span><span class='hs-layout'>,</span><span class='hs-num'>103</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-84"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Sitar"</span><span class='hs-layout'>,</span><span class='hs-num'>104</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                    <span class='hs-layout'>(</span><span class='hs-str'>"Banjo"</span><span class='hs-layout'>,</span><span class='hs-num'>105</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-85"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Shamisen"</span><span class='hs-layout'>,</span><span class='hs-num'>106</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                 <span class='hs-layout'>(</span><span class='hs-str'>"Koto"</span><span class='hs-layout'>,</span><span class='hs-num'>107</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-86"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Kalimba"</span><span class='hs-layout'>,</span><span class='hs-num'>108</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                  <span class='hs-layout'>(</span><span class='hs-str'>"Bagpipe"</span><span class='hs-layout'>,</span><span class='hs-num'>109</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-87"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Fiddle"</span><span class='hs-layout'>,</span><span class='hs-num'>110</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                   <span class='hs-layout'>(</span><span class='hs-str'>"Shanai"</span><span class='hs-layout'>,</span><span class='hs-num'>111</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-88"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Tinkle Bell"</span><span class='hs-layout'>,</span><span class='hs-num'>112</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>              <span class='hs-layout'>(</span><span class='hs-str'>"Agogo"</span><span class='hs-layout'>,</span><span class='hs-num'>113</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-89"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Steel Drums"</span><span class='hs-layout'>,</span><span class='hs-num'>114</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>              <span class='hs-layout'>(</span><span class='hs-str'>"Woodblock"</span><span class='hs-layout'>,</span><span class='hs-num'>115</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-90"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Taiko Drum"</span><span class='hs-layout'>,</span><span class='hs-num'>116</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>               <span class='hs-layout'>(</span><span class='hs-str'>"Melodic Drum"</span><span class='hs-layout'>,</span><span class='hs-num'>117</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-91"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Synth Drum"</span><span class='hs-layout'>,</span><span class='hs-num'>118</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>               <span class='hs-layout'>(</span><span class='hs-str'>"Reverse Cymbal"</span><span class='hs-layout'>,</span><span class='hs-num'>119</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-92"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Guitar Fret Noise"</span><span class='hs-layout'>,</span><span class='hs-num'>120</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>        <span class='hs-layout'>(</span><span class='hs-str'>"Breath Noise"</span><span class='hs-layout'>,</span><span class='hs-num'>121</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-93"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Seashore"</span><span class='hs-layout'>,</span><span class='hs-num'>122</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                 <span class='hs-layout'>(</span><span class='hs-str'>"Bird Tweet"</span><span class='hs-layout'>,</span><span class='hs-num'>123</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-94"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Telephone Ring"</span><span class='hs-layout'>,</span><span class='hs-num'>124</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>           <span class='hs-layout'>(</span><span class='hs-str'>"Helicopter"</span><span class='hs-layout'>,</span><span class='hs-num'>125</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-95"></a>      <span class='hs-layout'>(</span><span class='hs-str'>"Applause"</span><span class='hs-layout'>,</span><span class='hs-num'>126</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>                 <span class='hs-layout'>(</span><span class='hs-str'>"Gunshot"</span><span class='hs-layout'>,</span><span class='hs-num'>127</span><span class='hs-layout'>)</span>
<a name="line-96"></a>   <span class='hs-keyglyph'>]</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="instrumentFromProgram"></a><span class='hs-definition'>instrumentFromProgram</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-conid'>Program</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Instrument</span>
<a name="line-99"></a><span class='hs-definition'>instrumentFromProgram</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toEnum</span> <span class='hs-varop'>.</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-varid'>fromProgram</span>
<a name="line-100"></a>
<a name="line-101"></a><a name="instrumentToProgram"></a><span class='hs-definition'>instrumentToProgram</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Instrument</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-conid'>Program</span>
<a name="line-102"></a><span class='hs-definition'>instrumentToProgram</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-varid'>toProgram</span> <span class='hs-varop'>.</span> <span class='hs-varid'>fromEnum</span>
<a name="line-103"></a>
<a name="line-104"></a><a name="instrumentChannels"></a><span class='hs-definition'>instrumentChannels</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Channel</span><span class='hs-keyglyph'>]</span>
<a name="line-105"></a><span class='hs-definition'>instrumentChannels</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>map</span> <span class='hs-varid'>toChannel</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>[</span><span class='hs-num'>0</span><span class='hs-keyglyph'>..</span><span class='hs-num'>8</span><span class='hs-keyglyph'>]</span> <span class='hs-varop'>++</span> <span class='hs-keyglyph'>[</span><span class='hs-num'>10</span><span class='hs-keyglyph'>..</span><span class='hs-num'>15</span><span class='hs-keyglyph'>]</span>
<a name="line-106"></a>
<a name="line-107"></a><a name="instruments"></a><span class='hs-definition'>instruments</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Instrument</span><span class='hs-keyglyph'>]</span>
<a name="line-108"></a><span class='hs-definition'>instruments</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>enumFromTo</span> <span class='hs-varid'>minBound</span> <span class='hs-varid'>maxBound</span>
<a name="line-109"></a>
<a name="line-110"></a><a name="Instrument"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Instrument</span> <span class='hs-keyglyph'>=</span>
<a name="line-111"></a>     <span class='hs-conid'>AcousticGrandPiano</span>              <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BrightAcousticPiano</span>
<a name="line-112"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElectricGrandPiano</span>              <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HonkyTonk</span>
<a name="line-113"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElectricPiano1</span>                  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElectricPiano2</span>
<a name="line-114"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Harpsichord</span>                     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Clavinet</span>
<a name="line-115"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Celesta</span>                         <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Glockenspiel</span>
<a name="line-116"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>MusicBox</span>                        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Vibraphone</span>
<a name="line-117"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Marimba</span>                         <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Xylophone</span>
<a name="line-118"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TubularBells</span>                    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Dulcimer</span>
<a name="line-119"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DrawbarOrgan</span>                    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PercussiveOrgan</span>
<a name="line-120"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>RockOrgan</span>                       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ChurchOrgan</span>
<a name="line-121"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ReedOrgan</span>                       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Accordion</span>
<a name="line-122"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Harmonica</span>                       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TangoAccordian</span>
<a name="line-123"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AcousticGuitarNylon</span>             <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AcousticGuitarSteel</span>
<a name="line-124"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElectricGuitarJazz</span>              <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElectricGuitarClean</span>
<a name="line-125"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElectricGuitarMuted</span>             <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OverdrivenGuitar</span>
<a name="line-126"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DistortionGuitar</span>                <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GuitarHarmonics</span>
<a name="line-127"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AcousticBass</span>                    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElectricBassFinger</span>
<a name="line-128"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElectricBassPick</span>                <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FretlessBass</span>
<a name="line-129"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SlapBass1</span>                       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SlapBass2</span>
<a name="line-130"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SynthBass1</span>                      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SynthBass2</span>
<a name="line-131"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Violin</span>                          <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Viola</span>
<a name="line-132"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Cello</span>                           <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Contrabass</span>
<a name="line-133"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TremoloStrings</span>                  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PizzicatoStrings</span>
<a name="line-134"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OrchestralHarp</span>                  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Timpani</span>
<a name="line-135"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>StringEnsemble1</span>                 <span class='hs-keyglyph'>|</span> <span class='hs-conid'>StringEnsemble2</span>
<a name="line-136"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SynthStrings1</span>                   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SynthStrings2</span>
<a name="line-137"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ChoirAahs</span>                       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>VoiceOohs</span>
<a name="line-138"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SynthVoice</span>                      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OrchestraHit</span>
<a name="line-139"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Trumpet</span>                         <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Trombone</span>
<a name="line-140"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Tuba</span>                            <span class='hs-keyglyph'>|</span> <span class='hs-conid'>MutedTrumpet</span>
<a name="line-141"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FrenchHorn</span>                      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BrassSection</span>
<a name="line-142"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SynthBrass1</span>                     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SynthBrass2</span>
<a name="line-143"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SopranoSax</span>                      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AltoSax</span>
<a name="line-144"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TenorSax</span>                        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BaritoneSax</span>
<a name="line-145"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Oboe</span>                            <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EnglishHorn</span>
<a name="line-146"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Bassoon</span>                         <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Clarinet</span>
<a name="line-147"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Piccolo</span>                         <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Flute</span>
<a name="line-148"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Recorder</span>                        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PanFlute</span>
<a name="line-149"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BlownBottle</span>                     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Skakuhachi</span>
<a name="line-150"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Whistle</span>                         <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Ocarina</span>
<a name="line-151"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Lead1Square</span>                     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Lead2Sawtooth</span>
<a name="line-152"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Lead3Calliope</span>                   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Lead4Chiff</span>
<a name="line-153"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Lead5Charang</span>                    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Lead6Voice</span>
<a name="line-154"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Lead7Fifths</span>                     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Lead8BassLead</span>
<a name="line-155"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Pad1NewAge</span>                      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Pad2Warm</span>
<a name="line-156"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Pad3Polysynth</span>                   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Pad4Choir</span>
<a name="line-157"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Pad5Bowed</span>                       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Pad6Metallic</span>
<a name="line-158"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Pad7Halo</span>                        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Pad8Sweep</span>
<a name="line-159"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FX1Rain</span>                         <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FX2Soundtrack</span>
<a name="line-160"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FX3Crystal</span>                      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FX4Atmosphere</span>
<a name="line-161"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FX5Brightness</span>                   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FX6Goblins</span>
<a name="line-162"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FX7Echoes</span>                       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FX8SciFi</span>
<a name="line-163"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Sitar</span>                           <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Banjo</span>
<a name="line-164"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Shamisen</span>                        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Koto</span>
<a name="line-165"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Kalimba</span>                         <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Bagpipe</span>
<a name="line-166"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Fiddle</span>                          <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Shanai</span>
<a name="line-167"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TinkleBell</span>                      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Agogo</span>
<a name="line-168"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SteelDrums</span>                      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Woodblock</span>
<a name="line-169"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TaikoDrum</span>                       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>MelodicTom</span>
<a name="line-170"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SynthDrum</span>                       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ReverseCymbal</span>
<a name="line-171"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GuitarFretNoise</span>                 <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BreathNoise</span>
<a name="line-172"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Seashore</span>                        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BirdTweet</span>
<a name="line-173"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TelephoneRing</span>                   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Helicopter</span>
<a name="line-174"></a>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Applause</span>                        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Gunshot</span>
<a name="line-175"></a>     <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ix</span><span class='hs-layout'>,</span> <span class='hs-conid'>Enum</span><span class='hs-layout'>,</span> <span class='hs-conid'>Bounded</span><span class='hs-layout'>)</span>
<a name="line-176"></a>
<a name="line-177"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Random</span> <span class='hs-conid'>Instrument</span> <span class='hs-keyword'>where</span>
<a name="line-178"></a>   <span class='hs-varid'>random</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>boundedEnumRandom</span>
<a name="line-179"></a>   <span class='hs-varid'>randomR</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>enumRandomR</span>
<a name="line-180"></a>
<a name="line-181"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Arbitrary</span> <span class='hs-conid'>Instrument</span> <span class='hs-keyword'>where</span>
<a name="line-182"></a>   <span class='hs-varid'>arbitrary</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>chooseEnum</span>
<a name="line-183"></a>
<a name="line-184"></a>
<a name="line-185"></a>
<a name="line-186"></a><span class='hs-comment'>{- * Drum definitions -}</span>
<a name="line-187"></a>
<a name="line-188"></a>
<a name="line-189"></a><a name="drumChannel"></a><span class='hs-definition'>drumChannel</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Channel</span>
<a name="line-190"></a><span class='hs-definition'>drumChannel</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toChannel</span> <span class='hs-num'>9</span>
<a name="line-191"></a>
<a name="line-192"></a><a name="drumProgram"></a><span class='hs-definition'>drumProgram</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-conid'>Program</span>
<a name="line-193"></a><span class='hs-definition'>drumProgram</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-varid'>toProgram</span> <span class='hs-num'>0</span>
<a name="line-194"></a>
<a name="line-195"></a><a name="drumMinKey"></a><span class='hs-definition'>drumMinKey</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-conid'>Pitch</span>
<a name="line-196"></a><span class='hs-definition'>drumMinKey</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-varid'>toPitch</span> <span class='hs-num'>35</span>
<a name="line-197"></a>
<a name="line-198"></a><a name="drumKeyTable"></a><span class='hs-definition'>drumKeyTable</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Drum</span><span class='hs-layout'>,</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-conid'>Pitch</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-199"></a><span class='hs-definition'>drumKeyTable</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>zip</span> <span class='hs-varid'>drums</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>drumMinKey</span> <span class='hs-keyglyph'>..</span><span class='hs-keyglyph'>]</span>
<a name="line-200"></a>
<a name="line-201"></a><a name="drumFromKey"></a><span class='hs-definition'>drumFromKey</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-conid'>Pitch</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Drum</span>
<a name="line-202"></a><span class='hs-definition'>drumFromKey</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toEnum</span> <span class='hs-varop'>.</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-varid'>subtractPitch</span> <span class='hs-varid'>drumMinKey</span>
<a name="line-203"></a>
<a name="line-204"></a><a name="drumToKey"></a><span class='hs-definition'>drumToKey</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Drum</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-conid'>Pitch</span>
<a name="line-205"></a><span class='hs-definition'>drumToKey</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-conid'>VoiceMsg</span><span class='hs-varop'>.</span><span class='hs-varid'>increasePitch</span> <span class='hs-varid'>drumMinKey</span> <span class='hs-varop'>.</span> <span class='hs-varid'>fromEnum</span>
<a name="line-206"></a>
<a name="line-207"></a><a name="drums"></a><span class='hs-definition'>drums</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Drum</span><span class='hs-keyglyph'>]</span>
<a name="line-208"></a><span class='hs-definition'>drums</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>enumFromTo</span> <span class='hs-varid'>minBound</span> <span class='hs-varid'>maxBound</span>
<a name="line-209"></a>
<a name="line-210"></a>
<a name="line-211"></a><a name="Drum"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Drum</span> <span class='hs-keyglyph'>=</span>
<a name="line-212"></a>        <span class='hs-conid'>AcousticBassDrum</span>  <span class='hs-comment'>-- Midi Key 35</span>
<a name="line-213"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BassDrum1</span>         <span class='hs-comment'>-- Midi Key 36</span>
<a name="line-214"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SideStick</span>         <span class='hs-comment'>-- ...</span>
<a name="line-215"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AcousticSnare</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HandClap</span>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ElectricSnare</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LowFloorTom</span>
<a name="line-216"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ClosedHiHat</span>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HighFloorTom</span>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PedalHiHat</span>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LowTom</span>
<a name="line-217"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OpenHiHat</span>     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LowMidTom</span>     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HiMidTom</span>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CrashCymbal1</span>
<a name="line-218"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HighTom</span>       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>RideCymbal1</span>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ChineseCymbal</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>RideBell</span>
<a name="line-219"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Tambourine</span>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SplashCymbal</span>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Cowbell</span>       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CrashCymbal2</span>
<a name="line-220"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Vibraslap</span>     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>RideCymbal2</span>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HiBongo</span>       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LowBongo</span>
<a name="line-221"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>MuteHiConga</span>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OpenHiConga</span>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LowConga</span>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HighTimbale</span>
<a name="line-222"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LowTimbale</span>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HighAgogo</span>     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LowAgogo</span>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Cabasa</span>
<a name="line-223"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Maracas</span>       <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShortWhistle</span>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LongWhistle</span>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ShortGuiro</span>
<a name="line-224"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LongGuiro</span>     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Claves</span>        <span class='hs-keyglyph'>|</span> <span class='hs-conid'>HiWoodBlock</span>   <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LowWoodBlock</span>
<a name="line-225"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>MuteCuica</span>     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OpenCuica</span>     <span class='hs-keyglyph'>|</span> <span class='hs-conid'>MuteTriangle</span>
<a name="line-226"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OpenTriangle</span>      <span class='hs-comment'>-- Midi Key 81</span>
<a name="line-227"></a>   <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ix</span><span class='hs-layout'>,</span> <span class='hs-conid'>Enum</span><span class='hs-layout'>,</span> <span class='hs-conid'>Bounded</span><span class='hs-layout'>)</span>
<a name="line-228"></a>
<a name="line-229"></a><span class='hs-comment'>-- <a href="http://oxygen.cside6.com/gallery/ins_gm.html">http://oxygen.cside6.com/gallery/ins_gm.html</a></span>
<a name="line-230"></a>
<a name="line-231"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Random</span> <span class='hs-conid'>Drum</span> <span class='hs-keyword'>where</span>
<a name="line-232"></a>   <span class='hs-varid'>random</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>boundedEnumRandom</span>
<a name="line-233"></a>   <span class='hs-varid'>randomR</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>enumRandomR</span>
<a name="line-234"></a>
<a name="line-235"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Arbitrary</span> <span class='hs-conid'>Drum</span> <span class='hs-keyword'>where</span>
<a name="line-236"></a>   <span class='hs-varid'>arbitrary</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>chooseEnum</span>
</pre></body>
</html>