189 |
* engine afterwards by calling @c ResumeAll() later on! |
* engine afterwards by calling @c ResumeAll() later on! |
190 |
*/ |
*/ |
191 |
void Engine::SuspendAll() { |
void Engine::SuspendAll() { |
192 |
dmsg(1,("gig::Engine: Suspending all ...\n")); |
dmsg(2,("gig::Engine: Suspending all ...\n")); |
193 |
// stop the engine, so we can safely modify the engine's |
// stop the engine, so we can safely modify the engine's |
194 |
// data structures from this foreign thread |
// data structures from this foreign thread |
195 |
DisableAndLock(); |
DisableAndLock(); |
223 |
if (!iPendingStreamDeletions) break; |
if (!iPendingStreamDeletions) break; |
224 |
usleep(10000); // sleep for 10ms |
usleep(10000); // sleep for 10ms |
225 |
} |
} |
226 |
dmsg(1,("gig::Engine: Everything suspended.\n")); |
dmsg(2,("gig::Engine: Everything suspended.\n")); |
227 |
} |
} |
228 |
|
|
229 |
/** |
/** |
245 |
* @param pRegion - region the engine shall stop using |
* @param pRegion - region the engine shall stop using |
246 |
*/ |
*/ |
247 |
void Engine::Suspend(::gig::Region* pRegion) { |
void Engine::Suspend(::gig::Region* pRegion) { |
248 |
dmsg(1,("gig::Engine: Suspending Region %x ...\n",pRegion)); |
dmsg(2,("gig::Engine: Suspending Region %x ...\n",pRegion)); |
249 |
SuspendedRegionsMutex.Lock(); |
SuspendedRegionsMutex.Lock(); |
250 |
SuspensionChangeOngoing.Set(true); |
SuspensionChangeOngoing.Set(true); |
251 |
pPendingRegionSuspension = pRegion; |
pPendingRegionSuspension = pRegion; |
252 |
SuspensionChangeOngoing.WaitAndUnlockIf(true); |
SuspensionChangeOngoing.WaitAndUnlockIf(true); |
253 |
SuspendedRegionsMutex.Unlock(); |
SuspendedRegionsMutex.Unlock(); |
254 |
dmsg(1,("gig::Engine: Region %x suspended.",pRegion)); |
dmsg(2,("gig::Engine: Region %x suspended.",pRegion)); |
255 |
} |
} |
256 |
|
|
257 |
/** |
/** |
261 |
* @param pRegion - region the engine shall be allowed to use again |
* @param pRegion - region the engine shall be allowed to use again |
262 |
*/ |
*/ |
263 |
void Engine::Resume(::gig::Region* pRegion) { |
void Engine::Resume(::gig::Region* pRegion) { |
264 |
dmsg(1,("gig::Engine: Resuming Region %x ...\n",pRegion)); |
dmsg(2,("gig::Engine: Resuming Region %x ...\n",pRegion)); |
265 |
SuspendedRegionsMutex.Lock(); |
SuspendedRegionsMutex.Lock(); |
266 |
SuspensionChangeOngoing.Set(true); |
SuspensionChangeOngoing.Set(true); |
267 |
pPendingRegionResumption = pRegion; |
pPendingRegionResumption = pRegion; |
268 |
SuspensionChangeOngoing.WaitAndUnlockIf(true); |
SuspensionChangeOngoing.WaitAndUnlockIf(true); |
269 |
SuspendedRegionsMutex.Unlock(); |
SuspendedRegionsMutex.Unlock(); |
270 |
dmsg(1,("gig::Engine: Region %x resumed.\n",pRegion)); |
dmsg(2,("gig::Engine: Region %x resumed.\n",pRegion)); |
271 |
} |
} |
272 |
|
|
273 |
/** |
/** |
778 |
} |
} |
779 |
} |
} |
780 |
} |
} |
781 |
|
|
782 |
pEngineChannel->SetVoiceCount(voiceCount); |
pEngineChannel->SetVoiceCount(voiceCount); |
783 |
pEngineChannel->SetDiskStreamCount(streamCount); |
pEngineChannel->SetDiskStreamCount(streamCount); |
784 |
} |
} |
1686 |
break; |
break; |
1687 |
} |
} |
1688 |
case 65: { // portamento on / off |
case 65: { // portamento on / off |
1689 |
KillAllVoices(pEngineChannel, itControlChangeEvent); |
const bool bPortamento = itControlChangeEvent->Param.CC.Value >= 64; |
1690 |
pEngineChannel->PortamentoMode = itControlChangeEvent->Param.CC.Value >= 64; |
if (bPortamento != pEngineChannel->PortamentoMode) |
1691 |
|
KillAllVoices(pEngineChannel, itControlChangeEvent); |
1692 |
|
pEngineChannel->PortamentoMode = bPortamento; |
1693 |
break; |
break; |
1694 |
} |
} |
1695 |
case 66: { // sostenuto |
case 66: { // sostenuto |
1759 |
break; |
break; |
1760 |
} |
} |
1761 |
case 126: { // mono mode on |
case 126: { // mono mode on |
1762 |
KillAllVoices(pEngineChannel, itControlChangeEvent); |
if (!pEngineChannel->SoloMode) |
1763 |
|
KillAllVoices(pEngineChannel, itControlChangeEvent); |
1764 |
pEngineChannel->SoloMode = true; |
pEngineChannel->SoloMode = true; |
1765 |
break; |
break; |
1766 |
} |
} |
1767 |
case 127: { // poly mode on |
case 127: { // poly mode on |
1768 |
KillAllVoices(pEngineChannel, itControlChangeEvent); |
if (pEngineChannel->SoloMode) |
1769 |
|
KillAllVoices(pEngineChannel, itControlChangeEvent); |
1770 |
pEngineChannel->SoloMode = false; |
pEngineChannel->SoloMode = false; |
1771 |
break; |
break; |
1772 |
} |
} |
1975 |
} |
} |
1976 |
|
|
1977 |
String Engine::Version() { |
String Engine::Version() { |
1978 |
String s = "$Revision: 1.80 $"; |
String s = "$Revision: 1.82 $"; |
1979 |
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 |
1980 |
} |
} |
1981 |
|
|