俄罗斯方块游戏源码

源代码在线查看: csoundmixer.cpp

软件大小: 433 K
上传用户: a1a1J0
关键词: 俄罗斯方块 源码
下载地址: 免注册下载 普通下载 VIP

相关代码

				#include "CSoundMixer.h"
				#include "CMixerThread.h"
				#include 
				
				
				CSoundMixer* CSoundMixer::NewL()
				{
					CSoundMixer* self = new( ELeave )CSoundMixer();
					CleanupStack::PushL( self );
					self->ConstructL();
					CleanupStack::Pop( self );
					return self;
				}
				
				void CSoundMixer::ConstructL()
				{
					iShared.iMainVolume = 64;	// default main volume
				
					User::LeaveIfError( iMixerThread.Create( _L("Mixer"),
															 CMixerThread::ThreadFunction,
															 KDefaultStackSize,
															 NULL,
															 NULL) );
				
					// Give all possible priority to audio
					iMixerThread.SetPriority( EPriorityRealTime );
					RThread().SetPriority( EPriorityAbsoluteLow );
					
					User::LeaveIfError( iShared.iAliveMutex.CreateLocal( 1 ) );
					User::LeaveIfError( iShared.iMutex.CreateLocal() );
					iMixerThread.SetInitialParameter( &iShared );
					iMixerThread.Resume();
					iPaused = ETrue;
				}
				
				CSoundMixer::CSoundMixer()
				{
				}
				
				CSoundMixer::~CSoundMixer()
				{
					if( iPaused )
						SendCmd( ECmdStartMixer );			// maybe there's bug here
				
					SendCmd( ECmdDestroyMixer );
					//
					iShared.iAliveMutex.Wait();
					iShared.iAliveMutex.Close();
					iShared.iMutex.Close();
				
				}
				
				void CSoundMixer::Pause()
				{
					//RDebug::Print( _L("CSndMixer::Pause") );
					// check if mutex is already in wait ( pause mode )
					if( iPaused )
					{
						return;
					}
				
					iPaused = ETrue;
				
					SendCmd( ECmdStopMixer );
				}
				
				void CSoundMixer::Resume()
				{
					//RDebug::Print( _L("CSoundMixer::Resume") );
					if( !iPaused )
					{
						return;
					}
					iPaused = EFalse;
				
					SendCmd( ECmdStartMixer );
				}
				
				void CSoundMixer::Play( const TSample& aSample, TInt aChannel, TInt aFrequency, TInt aVolume )
				{
					iShared.iMutex.Wait();
					iShared.iPlayStarted[ aChannel ] = ETrue;
					iShared.iSample[ aChannel ] = aSample;
					iShared.iFrequency[ aChannel ] = aFrequency;
					iShared.iVolume[ aChannel ] = aVolume;
					iShared.iMutex.Signal();
				}
				
				
				void CSoundMixer::Stop( TInt aChannel )
				{
					iShared.iMutex.Wait();
					iShared.iPlayStarted[ aChannel ] = ETrue;
					iShared.iSample[ aChannel ] = iEmptySample;
					iShared.iMutex.Signal();	
				}
				
				
				void CSoundMixer::SetVolume( TInt aVolume )
				{
					iShared.iMutex.Wait();
					iShared.iMainVolume = aVolume;
					iShared.iMutex.Signal();	
				}
				
				
				TInt CSoundMixer::Volume()
				{
					return iShared.iMainVolume;
				}
				
				
				void CSoundMixer::SendCmd( TMixerCmd aCmd )
				{
					iShared.iMutex.Wait();
					iShared.iCmd = aCmd;
					iShared.iMutex.Signal();
					iMixerThread.RaiseException( EExcUserInterrupt );
				}
				
				
				
				
				
							

相关资源