3 |
* LinuxSampler - modular, streaming capable sampler * |
* LinuxSampler - modular, streaming capable sampler * |
4 |
* * |
* * |
5 |
* Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck * |
* Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck * |
6 |
* Copyright (C) 2005 - 2008 Christian Schoenebeck * |
* Copyright (C) 2005 - 2009 Christian Schoenebeck * |
7 |
* * |
* * |
8 |
* This program is free software; you can redistribute it and/or modify * |
* This program is free software; you can redistribute it and/or modify * |
9 |
* it under the terms of the GNU General Public License as published by * |
* it under the terms of the GNU General Public License as published by * |
397 |
MidiChannelMapReader.Unlock(); |
MidiChannelMapReader.Unlock(); |
398 |
} |
} |
399 |
|
|
400 |
|
void MidiInputPort::DispatchRaw(uint8_t* pData) { |
401 |
|
uint8_t channel = pData[0] & 0x0f; |
402 |
|
switch (pData[0] & 0xf0) { |
403 |
|
case 0x80: |
404 |
|
DispatchNoteOff(pData[1], pData[2], channel); |
405 |
|
break; |
406 |
|
case 0x90: |
407 |
|
if (pData[2]) { |
408 |
|
DispatchNoteOn(pData[1], pData[2], channel); |
409 |
|
} else { |
410 |
|
DispatchNoteOff(pData[1], pData[2], channel); |
411 |
|
} |
412 |
|
break; |
413 |
|
case 0xb0: |
414 |
|
if (pData[1] == 0) { |
415 |
|
DispatchBankSelectMsb(pData[2], channel); |
416 |
|
} else if (pData[1] == 32) { |
417 |
|
DispatchBankSelectLsb(pData[2], channel); |
418 |
|
} |
419 |
|
DispatchControlChange(pData[1], pData[2], channel); |
420 |
|
break; |
421 |
|
case 0xc0: |
422 |
|
DispatchProgramChange(pData[1], channel); |
423 |
|
break; |
424 |
|
case 0xd0: |
425 |
|
DispatchControlChange(128, pData[1], channel); |
426 |
|
break; |
427 |
|
case 0xe0: |
428 |
|
DispatchPitchbend((pData[1] | pData[2] << 7) - 8192, channel); |
429 |
|
break; |
430 |
|
} |
431 |
|
} |
432 |
|
|
433 |
void MidiInputPort::DispatchRaw(uint8_t* pData, int32_t FragmentPos) { |
void MidiInputPort::DispatchRaw(uint8_t* pData, int32_t FragmentPos) { |
434 |
uint8_t channel = pData[0] & 0x0f; |
uint8_t channel = pData[0] & 0x0f; |
435 |
switch (pData[0] & 0xf0) { |
switch (pData[0] & 0xf0) { |
458 |
DispatchControlChange(128, pData[1], channel, FragmentPos); |
DispatchControlChange(128, pData[1], channel, FragmentPos); |
459 |
break; |
break; |
460 |
case 0xe0: |
case 0xe0: |
461 |
DispatchPitchbend(pData[1], channel, FragmentPos); |
DispatchPitchbend((pData[1] | pData[2] << 7) - 8192, channel, FragmentPos); |
462 |
break; |
break; |
463 |
} |
} |
464 |
} |
} |