272 |
// dispatch event to all engine instances |
// dispatch event to all engine instances |
273 |
std::set<Engine*>::iterator engineiter = allEngines.begin(); |
std::set<Engine*>::iterator engineiter = allEngines.begin(); |
274 |
std::set<Engine*>::iterator end = allEngines.end(); |
std::set<Engine*>::iterator end = allEngines.end(); |
275 |
for (; engineiter != end; engineiter++) (*engineiter)->SendSysex(pData, Size); |
for (; engineiter != end; engineiter++) (*engineiter)->SendSysex(pData, Size, this); |
276 |
SysexListenersReader.Unlock(); |
SysexListenersReader.Unlock(); |
277 |
} |
} |
278 |
|
|
397 |
MidiChannelMapReader.Unlock(); |
MidiChannelMapReader.Unlock(); |
398 |
} |
} |
399 |
|
|
400 |
|
void MidiInputPort::DispatchRaw(uint8_t* pData, int32_t FragmentPos) { |
401 |
|
uint8_t channel = pData[0] & 0x0f; |
402 |
|
switch (pData[0] & 0xf0) { |
403 |
|
case 0x80: |
404 |
|
DispatchNoteOff(pData[1], pData[2], channel, FragmentPos); |
405 |
|
break; |
406 |
|
case 0x90: |
407 |
|
if (pData[2]) { |
408 |
|
DispatchNoteOn(pData[1], pData[2], channel, FragmentPos); |
409 |
|
} else { |
410 |
|
DispatchNoteOff(pData[1], pData[2], channel, FragmentPos); |
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, FragmentPos); |
420 |
|
break; |
421 |
|
case 0xc0: |
422 |
|
DispatchProgramChange(pData[1], channel); |
423 |
|
break; |
424 |
|
case 0xd0: |
425 |
|
DispatchControlChange(128, pData[1], channel, FragmentPos); |
426 |
|
break; |
427 |
|
case 0xe0: |
428 |
|
DispatchPitchbend(pData[1], channel, FragmentPos); |
429 |
|
break; |
430 |
|
} |
431 |
|
} |
432 |
|
|
433 |
void MidiInputPort::Connect(EngineChannel* pEngineChannel, midi_chan_t MidiChannel) { |
void MidiInputPort::Connect(EngineChannel* pEngineChannel, midi_chan_t MidiChannel) { |
434 |
if (MidiChannel < 0 || MidiChannel > 16) |
if (MidiChannel < 0 || MidiChannel > 16) |
435 |
throw MidiInputException("MIDI channel index out of bounds"); |
throw MidiInputException("MIDI channel index out of bounds"); |