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-2008 Christian Schoenebeck * |
7 |
* Copyright (C) 2009-2013 Christian Schoenebeck and Grigor Iliev * |
* Copyright (C) 2009-2015 Christian Schoenebeck and Grigor Iliev * |
8 |
* * |
* * |
9 |
* This program is free software; you can redistribute it and/or modify * |
* This program is free software; you can redistribute it and/or modify * |
10 |
* 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 * |
432 |
* @param pRegion - region the engine shall stop using |
* @param pRegion - region the engine shall stop using |
433 |
*/ |
*/ |
434 |
virtual void Suspend(RR* pRegion) { |
virtual void Suspend(RR* pRegion) { |
435 |
dmsg(2,("EngineBase: Suspending Region %x ...\n",pRegion)); |
dmsg(2,("EngineBase: Suspending Region %p ...\n",(void*)pRegion)); |
436 |
{ |
{ |
437 |
LockGuard lock(SuspendedRegionsMutex); |
LockGuard lock(SuspendedRegionsMutex); |
438 |
SuspensionChangeOngoing.Set(true); |
SuspensionChangeOngoing.Set(true); |
439 |
pPendingRegionSuspension = pRegion; |
pPendingRegionSuspension = pRegion; |
440 |
SuspensionChangeOngoing.WaitAndUnlockIf(true); |
SuspensionChangeOngoing.WaitAndUnlockIf(true); |
441 |
} |
} |
442 |
dmsg(2,("EngineBase: Region %x suspended.",pRegion)); |
dmsg(2,("EngineBase: Region %p suspended.",(void*)pRegion)); |
443 |
} |
} |
444 |
|
|
445 |
/** |
/** |
449 |
* @param pRegion - region the engine shall be allowed to use again |
* @param pRegion - region the engine shall be allowed to use again |
450 |
*/ |
*/ |
451 |
virtual void Resume(RR* pRegion) { |
virtual void Resume(RR* pRegion) { |
452 |
dmsg(2,("EngineBase: Resuming Region %x ...\n",pRegion)); |
dmsg(2,("EngineBase: Resuming Region %p ...\n",(void*)pRegion)); |
453 |
{ |
{ |
454 |
LockGuard lock(SuspendedRegionsMutex); |
LockGuard lock(SuspendedRegionsMutex); |
455 |
SuspensionChangeOngoing.Set(true); |
SuspensionChangeOngoing.Set(true); |
456 |
pPendingRegionResumption = pRegion; |
pPendingRegionResumption = pRegion; |
457 |
SuspensionChangeOngoing.WaitAndUnlockIf(true); |
SuspensionChangeOngoing.WaitAndUnlockIf(true); |
458 |
} |
} |
459 |
dmsg(2,("EngineBase: Region %x resumed.\n",pRegion)); |
dmsg(2,("EngineBase: Region %p resumed.\n",(void*)pRegion)); |
460 |
} |
} |
461 |
|
|
462 |
virtual void ResetSuspendedRegions() { |
virtual void ResetSuspendedRegions() { |
1155 |
case 0x1d: { // reverb send of note (Roland GS NRPN) |
case 0x1d: { // reverb send of note (Roland GS NRPN) |
1156 |
const uint note = NrpnCtrlLSB; |
const uint note = NrpnCtrlLSB; |
1157 |
const float reverb = float(itControlChangeEvent->Param.CC.Value) / 127.0f; |
const float reverb = float(itControlChangeEvent->Param.CC.Value) / 127.0f; |
1158 |
dmsg(4,("Note Reverb Send NRPN received (note=%d,send=%d).\n", note, reverb)); |
dmsg(4,("Note Reverb Send NRPN received (note=%d,send=%f).\n", note, reverb)); |
1159 |
if (note < 128) |
if (note < 128) |
1160 |
pChannel->pMIDIKeyInfo[note].ReverbSend = reverb; |
pChannel->pMIDIKeyInfo[note].ReverbSend = reverb; |
1161 |
break; |
break; |
1163 |
case 0x1e: { // chorus send of note (Roland GS NRPN) |
case 0x1e: { // chorus send of note (Roland GS NRPN) |
1164 |
const uint note = NrpnCtrlLSB; |
const uint note = NrpnCtrlLSB; |
1165 |
const float chorus = float(itControlChangeEvent->Param.CC.Value) / 127.0f; |
const float chorus = float(itControlChangeEvent->Param.CC.Value) / 127.0f; |
1166 |
dmsg(4,("Note Chorus Send NRPN received (note=%d,send=%d).\n", note, chorus)); |
dmsg(4,("Note Chorus Send NRPN received (note=%d,send=%f).\n", note, chorus)); |
1167 |
if (note < 128) |
if (note < 128) |
1168 |
pChannel->pMIDIKeyInfo[note].ChorusSend = chorus; |
pChannel->pMIDIKeyInfo[note].ChorusSend = chorus; |
1169 |
break; |
break; |