1 : <?php
2 :
3 : /**
4 : * \Midi\Util\Controller
5 : *
6 : * @package Midi
7 : * @subpackage Util
8 : * @copyright © 2009 Tommy Montgomery <http://phpmidiparser.com/>
9 : * @since 1.0
10 : */
11 :
12 : namespace Midi\Util;
13 :
14 : /**
15 : * Enumeration representing the different MIDI controllers
16 : *
17 : * @package Midi
18 : * @subpackage Util
19 : * @since 1.0
20 : */
21 1 : final class Controller {
22 : /**
23 : * Bank Select
24 : *
25 : * @var int
26 : */
27 : const BANK_SELECT = 0x0;
28 : /**
29 : * Modulation
30 : *
31 : * @var int
32 : */
33 : const MODULATION = 0x1;
34 : /**
35 : * Breath Controller
36 : *
37 : * @var int
38 : */
39 : const BREATH_CONTROLLER = 0x2;
40 : /**
41 : * Foot Controller
42 : *
43 : * @var int
44 : */
45 : const FOOT_CONTROLLER = 0x4;
46 : /**
47 : * Portamento Time
48 : *
49 : * @var int
50 : */
51 : const PORTAMENTO_TIME = 0x5;
52 : /**
53 : * Data Entry (most significant bits)
54 : *
55 : * @var int
56 : */
57 : const DATA_ENTRY = 0x6;
58 : /**
59 : * Main Volume
60 : *
61 : * @var int
62 : */
63 : const MAIN_VOLUME = 0x7;
64 : /**
65 : * Balance
66 : *
67 : * @var int
68 : */
69 : const BALANCE = 0x8;
70 : /**
71 : * Pan
72 : *
73 : * @var int
74 : */
75 : const PAN = 0xA;
76 : /**
77 : * Expression Controller
78 : *
79 : * @var int
80 : */
81 : const EXPRESSION_CONTROLLER = 0xB;
82 : /**
83 : * Effect Controller #1
84 : *
85 : * @var int
86 : */
87 : const EFFECT_CONTROLLER1 = 0xC;
88 : /**
89 : * Effect Controller #2
90 : *
91 : * @var int
92 : */
93 : const EFFECT_CONTROLLER2 = 0xD;
94 : /**
95 : * General Purpose Controller #1
96 : *
97 : * @var int
98 : */
99 : const GENERAL_PURPOSE_CONTROLLER1 = 0x10;
100 : /**
101 : * General Purpose Controller #2
102 : *
103 : * @var int
104 : */
105 : const GENERAL_PURPOSE_CONTROLLER2 = 0x11;
106 : /**
107 : * General Purpose Controller #3
108 : *
109 : * @var int
110 : */
111 : const GENERAL_PURPOSE_CONTROLLER3 = 0x12;
112 : /**
113 : * General Purpose Controller #4
114 : *
115 : * @var int
116 : */
117 : const GENERAL_PURPOSE_CONTROLLER4 = 0x13;
118 : /**
119 : * Bank Select (least significant bits)
120 : *
121 : * @var int
122 : */
123 : const LSB0 = 0x20;
124 : /**
125 : * Modulation (least significant bits)
126 : *
127 : * @var int
128 : */
129 : const LSB1 = 0x21;
130 : /**
131 : * Breath Controller (least significant bits)
132 : *
133 : * @var int
134 : */
135 : const LSB2 = 0x22;
136 : /**
137 : * Foot Controller (least significant bits)
138 : *
139 : * @var int
140 : */
141 : const LSB4 = 0x24;
142 : /**
143 : * Portamento Time (least significant bits)
144 : *
145 : * @var int
146 : */
147 : const LSB5 = 0x25;
148 : /**
149 : * Data Entry (least significant bits)
150 : *
151 : * @var int
152 : */
153 : const LSB6 = 0x26;
154 : /**
155 : * Main Volume (least significant bits)
156 : *
157 : * @var int
158 : */
159 : const LSB7 = 0x27;
160 : /**
161 : * Balance (least significant bits)
162 : *
163 : * @var int
164 : */
165 : const LSB8 = 0x28;
166 : /**
167 : * Pan (least significant bits)
168 : *
169 : * @var int
170 : */
171 : const LSB10 = 0x2A;
172 : /**
173 : * Expression Controller (least significant bits)
174 : *
175 : * @var int
176 : */
177 : const LSB11 = 0x2B;
178 : /**
179 : * Effect Controller #1 (least significant bits)
180 : *
181 : * @var int
182 : */
183 : const LSB12 = 0x2C;
184 : /**
185 : * Effect Controller #2 (least significant bits)
186 : *
187 : * @var int
188 : */
189 : const LSB13 = 0x2D;
190 : /**
191 : * General Purpose Controller #1 (least significant bits)
192 : *
193 : * @var int
194 : */
195 : const LSB16 = 0x30;
196 : /**
197 : * General Purpose Controller #2 (least significant bits)
198 : *
199 : * @var int
200 : */
201 : const LSB17 = 0x31;
202 : /**
203 : * General Purpose Controller #3 (least significant bits)
204 : *
205 : * @var int
206 : */
207 : const LSB18 = 0x32;
208 : /**
209 : * General Purpose Controller #4 (least significant bits)
210 : *
211 : * @var int
212 : */
213 : const LSB19 = 0x33;
214 : /**
215 : * Damper Pedal
216 : *
217 : * @var int
218 : */
219 : const DAMPER_PEDAL = 0x40;
220 : /**
221 : * Portamento
222 : *
223 : * @var int
224 : */
225 : const PORTAMENTO = 0x41;
226 : /**
227 : * Sostenuto Pedal
228 : *
229 : * @var int
230 : */
231 : const SOSTENUTO = 0x42;
232 : /**
233 : * Soft Pedal
234 : *
235 : * @var int
236 : */
237 : const SOFT_PEDAL = 0x43;
238 : /**
239 : * Legato Footswitch
240 : *
241 : * @var int
242 : */
243 : const LEGATO_FOOTSWITCH = 0x44;
244 : /**
245 : * Hold
246 : *
247 : * @var int
248 : */
249 : const HOLD2 = 0x45;
250 : /**
251 : * Sound Controller #1
252 : *
253 : * @var int
254 : */
255 : const SOUND_CONTROLLER1 = 0x46;
256 : /**
257 : * Sound Controller #2
258 : *
259 : * @var int
260 : */
261 : const SOUND_CONTROLLER2 = 0x47;
262 : /**
263 : * Sound Controller #3
264 : *
265 : * @var int
266 : */
267 : const SOUND_CONTROLLER3 = 0x48;
268 : /**
269 : * Sound Controller #4
270 : *
271 : * @var int
272 : */
273 : const SOUND_CONTROLLER4 = 0x49;
274 : /**
275 : * Sound Controller #6
276 : *
277 : * @var int
278 : */
279 : const SOUND_CONTROLLER6 = 0x4B;
280 : /**
281 : * Sound Controller #7
282 : *
283 : * @var int
284 : */
285 : const SOUND_CONTROLLER7 = 0x4C;
286 : /**
287 : * Sound Controller #8
288 : *
289 : * @var int
290 : */
291 : const SOUND_CONTROLLER8 = 0x4D;
292 : /**
293 : * Sound Controller #9
294 : *
295 : * @var int
296 : */
297 : const SOUND_CONTROLLER9 = 0x4E;
298 : /**
299 : * Sound Controller #10
300 : *
301 : * @var int
302 : */
303 : const SOUND_CONTROLLER10 = 0x4F;
304 : /**
305 : * General Purpose Controller #5
306 : *
307 : * @var int
308 : */
309 : const GENERAL_PURPOSE_CONTROLLER5 = 0x50;
310 : /**
311 : * General Purpose Controller #6
312 : *
313 : * @var int
314 : */
315 : const GENERAL_PURPOSE_CONTROLLER6 = 0x51;
316 : /**
317 : * General Purpose Controller #7
318 : *
319 : * @var int
320 : */
321 : const GENERAL_PURPOSE_CONTROLLER7 = 0x52;
322 : /**
323 : * General Purpose Controller #8
324 : *
325 : * @var int
326 : */
327 : const GENERAL_PURPOSE_CONTROLLER8 = 0x53;
328 : /**
329 : * Portamento Control
330 : *
331 : * @var int
332 : */
333 : const PORTAMENTO_CONTROL = 0x54;
334 : /**
335 : * Effects Depth #1
336 : *
337 : * @var int
338 : */
339 : const EFFECTS_DEPTH1 = 0x5B;
340 : /**
341 : * Effects Depth #2
342 : *
343 : * @var int
344 : */
345 : const EFFECTS_DEPTH2 = 0x5C;
346 : /**
347 : * Effects Depth #3
348 : *
349 : * @var int
350 : */
351 : const EFFECTS_DEPTH3 = 0x5D;
352 : /**
353 : * Effects Depth #4
354 : *
355 : * @var int
356 : */
357 : const EFFECTS_DEPTH4 = 0x5E;
358 : /**
359 : * Effects Depth #5
360 : *
361 : * @var int
362 : */
363 : const EFFECTS_DEPTH5 = 0x5F;
364 : /**
365 : * Data Increment
366 : *
367 : * @var int
368 : */
369 : const DATA_INCREMENT = 0x60;
370 : /**
371 : * Data Decrement
372 : *
373 : * @var int
374 : */
375 : const DATA_DECREMENT = 0x61;
376 : /**
377 : * Non-registered Parameter Number (least significant bits)
378 : *
379 : * @var int
380 : */
381 : const NON_REGISTERED_PARAMETER_NUMBER_LSB = 0x62;
382 : /**
383 : * Non-registered Parameter Number (most significant bits)
384 : *
385 : * @var int
386 : */
387 : const NON_REGISTERED_PARAMETER_NUMBER_MSB = 0x63;
388 : /**
389 : * Registered Parameter Number (least significant bits)
390 : *
391 : * @var int
392 : */
393 : const REGISTERED_PARAMETER_NUMBER_LSB = 0x64;
394 : /**
395 : * Registered Parameter Number (most significant bits)
396 : *
397 : * @var int
398 : */
399 : const REGISTERED_PARAMETER_NUMBER_MSB = 0x65;
400 : /**
401 : * Mode Message #1
402 : *
403 : * @var int
404 : */
405 : const MODE_MESSAGE1 = 0x79;
406 : /**
407 : * Mode Message #2
408 : *
409 : * @var int
410 : */
411 : const MODE_MESSAGE2 = 0x7A;
412 : /**
413 : * Mode Message #3
414 : *
415 : * @var int
416 : */
417 : const MODE_MESSAGE3 = 0x7B;
418 : /**
419 : * Mode Message #4
420 : *
421 : * @var int
422 : */
423 : const MODE_MESSAGE4 = 0x7C;
424 : /**
425 : * Mode Message #5
426 : *
427 : * @var int
428 : */
429 : const MODE_MESSAGE5 = 0x7D;
430 : /**
431 : * Mode Message #6
432 : *
433 : * @var int
434 : */
435 : const MODE_MESSAGE6 = 0x7E;
436 : /**
437 : * Mode Message #7
438 : *
439 : * @var int
440 : */
441 : const MODE_MESSAGE7 = 0x7F;
442 :
443 : /**
444 : * @ignore
445 : */
446 : private static $controllerMap = array(
447 : self::BANK_SELECT => 'Bank Select',
448 : self::MODULATION => 'Modulation',
449 : self::BREATH_CONTROLLER => 'Breath Controller',
450 : self::FOOT_CONTROLLER => 'Foot Controller',
451 : self::PORTAMENTO_TIME => 'Portamento Time',
452 : self::DATA_ENTRY => 'Data Entry (most significant bits)',
453 : self::MAIN_VOLUME => 'Main Volume',
454 : self::BALANCE => 'Balance',
455 : self::PAN => 'Pan',
456 : self::EXPRESSION_CONTROLLER => 'Expression Controller',
457 : self::EFFECT_CONTROLLER1 => 'Effect Controller #1',
458 : self::EFFECT_CONTROLLER2 => 'Effect Controller #2',
459 : self::GENERAL_PURPOSE_CONTROLLER1 => 'General Purpose Controller #1',
460 : self::GENERAL_PURPOSE_CONTROLLER2 => 'General Purpose Controller #2',
461 : self::GENERAL_PURPOSE_CONTROLLER3 => 'General Purpose Controller #3',
462 : self::GENERAL_PURPOSE_CONTROLLER4 => 'General Purpose Controller #4',
463 : self::LSB0 => 'Bank Select (least significant bits)',
464 : self::LSB1 => 'Modulation (least significant bits)',
465 : self::LSB2 => 'Breath Controller (least significant bits)',
466 : self::LSB4 => 'Foot Controller (least significant bits)',
467 : self::LSB5 => 'Portamento Time (least significant bits)',
468 : self::LSB6 => 'Data Entry (least significant bits)',
469 : self::LSB7 => 'Main Volume (least significant bits)',
470 : self::LSB8 => 'Balance (least significant bits)',
471 : self::LSB10 => 'Pan (least significant bits)',
472 : self::LSB11 => 'Expression Controller (least significant bits)',
473 : self::LSB12 => 'Effect Controller #1 (least significant bits)',
474 : self::LSB13 => 'Effect Controller #2 (least significant bits)',
475 : self::LSB16 => 'General Purpose Controller #1 (least significant bits)',
476 : self::LSB17 => 'General Purpose Controller #2 (least significant bits)',
477 : self::LSB18 => 'General Purpose Controller #3 (least significant bits)',
478 : self::LSB19 => 'General Purpose Controller #4 (least significant bits)',
479 : self::DAMPER_PEDAL => 'Damper Pedal',
480 : self::PORTAMENTO => 'Portamento',
481 : self::SOSTENUTO => 'Sostenuto Pedal',
482 : self::SOFT_PEDAL => 'Soft Pedal',
483 : self::LEGATO_FOOTSWITCH => 'Legato Footswitch',
484 : self::HOLD2 => 'Hold',
485 : self::SOUND_CONTROLLER1 => 'Sound Controller #1',
486 : self::SOUND_CONTROLLER2 => 'Sound Controller #2',
487 : self::SOUND_CONTROLLER3 => 'Sound Controller #3',
488 : self::SOUND_CONTROLLER4 => 'Sound Controller #4',
489 : self::SOUND_CONTROLLER6 => 'Sound Controller #6',
490 : self::SOUND_CONTROLLER7 => 'Sound Controller #7',
491 : self::SOUND_CONTROLLER8 => 'Sound Controller #8',
492 : self::SOUND_CONTROLLER9 => 'Sound Controller #9',
493 : self::SOUND_CONTROLLER10 => 'Sound Controller #10',
494 : self::GENERAL_PURPOSE_CONTROLLER5 => 'General Purpose Controller #5',
495 : self::GENERAL_PURPOSE_CONTROLLER6 => 'General Purpose Controller #6',
496 : self::GENERAL_PURPOSE_CONTROLLER7 => 'General Purpose Controller #7',
497 : self::GENERAL_PURPOSE_CONTROLLER8 => 'General Purpose Controller #8',
498 : self::PORTAMENTO_CONTROL => 'Portamento Control',
499 : self::EFFECTS_DEPTH1 => 'Effects Depth #1',
500 : self::EFFECTS_DEPTH2 => 'Effects Depth #2',
501 : self::EFFECTS_DEPTH3 => 'Effects Depth #3',
502 : self::EFFECTS_DEPTH4 => 'Effects Depth #4',
503 : self::EFFECTS_DEPTH5 => 'Effects Depth #5',
504 : self::DATA_INCREMENT => 'Data Increment',
505 : self::DATA_DECREMENT => 'Data Decrement',
506 : self::NON_REGISTERED_PARAMETER_NUMBER_LSB => 'Non-registered Parameter Number (least significant bits)',
507 : self::NON_REGISTERED_PARAMETER_NUMBER_MSB => 'Non-registered Parameter Number (most significant bits)',
508 : self::REGISTERED_PARAMETER_NUMBER_LSB => 'Registered Parameter Number (least significant bits)',
509 : self::REGISTERED_PARAMETER_NUMBER_MSB => 'Registered Parameter Number (most significant bits)',
510 : self::MODE_MESSAGE1 => 'Mode Message #1',
511 : self::MODE_MESSAGE2 => 'Mode Message #2',
512 : self::MODE_MESSAGE3 => 'Mode Message #3',
513 : self::MODE_MESSAGE4 => 'Mode Message #4',
514 : self::MODE_MESSAGE5 => 'Mode Message #5',
515 : self::MODE_MESSAGE6 => 'Mode Message #6',
516 : self::MODE_MESSAGE7 => 'Mode Message #7'
517 : );
518 :
519 : /**
520 : * Gets the description of a controller
521 : *
522 : * @since 1.0
523 : * @todo Fix the name of this method
524 : *
525 : * @param int $controller One of the {@link Controller} constants
526 : * @throws InvalidArgumentException
527 : * @return string
528 : */
529 : public static function getControllerName($controller) {
530 3 : if (!isset(self::$controllerMap[$controller])) {
531 1 : throw new \InvalidArgumentException('Invalid controller');
532 : }
533 :
534 2 : return self::$controllerMap[$controller];
535 : }
536 :
537 : }
538 :
|