116 |
* Destructor |
* Destructor |
117 |
*/ |
*/ |
118 |
Engine::~Engine() { |
Engine::~Engine() { |
119 |
|
MidiInputPort::RemoveSysexListener(this); |
120 |
if (pDiskThread) { |
if (pDiskThread) { |
121 |
dmsg(1,("Stopping disk thread...")); |
dmsg(1,("Stopping disk thread...")); |
122 |
pDiskThread->StopThread(); |
pDiskThread->StopThread(); |
166 |
|
|
167 |
/** |
/** |
168 |
* Reset all voices and disk thread and clear input event queue and all |
* Reset all voices and disk thread and clear input event queue and all |
169 |
* control and status variables. This method is not thread safe! |
* control and status variables. This method is protected by a mutex. |
170 |
*/ |
*/ |
171 |
void Engine::ResetInternal() { |
void Engine::ResetInternal() { |
172 |
|
ResetInternalMutex.Lock(); |
173 |
|
|
174 |
|
// make sure that the engine does not get any sysex messages |
175 |
|
// while it's reseting |
176 |
|
bool sysexDisabled = MidiInputPort::RemoveSysexListener(this); |
177 |
ActiveVoiceCount = 0; |
ActiveVoiceCount = 0; |
178 |
ActiveVoiceCountMax = 0; |
ActiveVoiceCountMax = 0; |
179 |
|
|
197 |
// delete all input events |
// delete all input events |
198 |
pEventQueue->init(); |
pEventQueue->init(); |
199 |
pSysexBuffer->init(); |
pSysexBuffer->init(); |
200 |
|
if (sysexDisabled) MidiInputPort::AddSysexListener(this); |
201 |
|
ResetInternalMutex.Unlock(); |
202 |
} |
} |
203 |
|
|
204 |
/** |
/** |
642 |
{ |
{ |
643 |
const ::gig::Instrument* pInstrument = pEngineChannel->pInstrument; |
const ::gig::Instrument* pInstrument = pEngineChannel->pInstrument; |
644 |
if (key >= pInstrument->DimensionKeyRange.low && key <= pInstrument->DimensionKeyRange.high) |
if (key >= pInstrument->DimensionKeyRange.low && key <= pInstrument->DimensionKeyRange.high) |
645 |
pEngineChannel->CurrentKeyDimension = ((key - pInstrument->DimensionKeyRange.low) * 128) / |
pEngineChannel->CurrentKeyDimension = float(key - pInstrument->DimensionKeyRange.low) / |
646 |
(pInstrument->DimensionKeyRange.high - pInstrument->DimensionKeyRange.low + 1); |
(pInstrument->DimensionKeyRange.high - pInstrument->DimensionKeyRange.low + 1); |
647 |
} |
} |
648 |
|
|
877 |
DimValues[i] = (uint) ReleaseTriggerVoice; |
DimValues[i] = (uint) ReleaseTriggerVoice; |
878 |
break; |
break; |
879 |
case ::gig::dimension_keyboard: |
case ::gig::dimension_keyboard: |
880 |
DimValues[i] = (uint) pEngineChannel->CurrentKeyDimension; |
DimValues[i] = (uint) (pEngineChannel->CurrentKeyDimension * pRegion->pDimensionDefinitions[i].zones); |
881 |
break; |
break; |
882 |
case ::gig::dimension_roundrobin: |
case ::gig::dimension_roundrobin: |
883 |
DimValues[i] = (uint) pEngineChannel->pMIDIKeyInfo[MIDIKey].RoundRobinIndex; // incremented for each note on |
DimValues[i] = (uint) pEngineChannel->pMIDIKeyInfo[MIDIKey].RoundRobinIndex; // incremented for each note on |
1357 |
break; |
break; |
1358 |
} |
} |
1359 |
case 123: { // all notes off |
case 123: { // all notes off |
1360 |
|
#if CONFIG_PROCESS_ALL_NOTES_OFF |
1361 |
ReleaseAllVoices(pEngineChannel, itControlChangeEvent); |
ReleaseAllVoices(pEngineChannel, itControlChangeEvent); |
1362 |
|
#endif // CONFIG_PROCESS_ALL_NOTES_OFF |
1363 |
break; |
break; |
1364 |
} |
} |
1365 |
case 126: { // mono mode on |
case 126: { // mono mode on |
1567 |
} |
} |
1568 |
|
|
1569 |
String Engine::Version() { |
String Engine::Version() { |
1570 |
String s = "$Revision: 1.59 $"; |
String s = "$Revision: 1.62 $"; |
1571 |
return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword |
return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword |
1572 |
} |
} |
1573 |
|
|