Ejemplo n.º 1
0
void BtnIMPVoicesPreviousCallback( GUI_BUTTON *btn, INT32 reason )
{

	// btn callback for IMP attrbite begin button
	if ( !(btn->uiFlags & BUTTON_ENABLED) )
		return;

	if ( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
	{
		btn->uiFlags |= (BUTTON_CLICKED_ON);
	}
	else if ( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
	{
		if ( btn->uiFlags & BUTTON_CLICKED_ON )
		{
			btn->uiFlags &= ~(BUTTON_CLICKED_ON);

			// previous voice, please!!!
			DecrementVoice( );
			// play voice
			if ( !SoundIsPlaying( uiVocVoiceSound ) )
			{
				uiVocVoiceSound = PlayVoice( );
			}
			else
			{
				SoundStop( uiVocVoiceSound );
				uiVocVoiceSound = PlayVoice( );
			}

			fReDrawVoicesScreenFlag = TRUE;
		}
	}
}
Ejemplo n.º 2
0
void EnterIMPVoices( void )
{
	fVoiceAVisited = FALSE;
	fVoiceBVisited = FALSE;
	fVoiceCVisited = FALSE;

	// Set the initial voice
	if (fCharacterIsMale == TRUE)
	{
		iCurrentVoice = GetFirstFreeSlot(MALE);
	}
	else
	{
		iCurrentVoice = GetFirstFreeSlot(FEMALE);
	}

	// create buttons
	CreateIMPVoicesButtons( );

	// create mouse regions
	CreateIMPVoiceMouseRegions( );

	// render background
	RenderIMPVoices( );

	// play voice once
	uiVocVoiceSound = PlayVoice( );

	return;
}
Ejemplo n.º 3
0
void BtnIMPFinishVoiceCallback(GUI_BUTTON *btn,INT32 reason)
{

	// btn callback for Main Page Begin Profiling

	if (!(btn->uiFlags & BUTTON_ENABLED))
		return;
  // if not this far in char generation, don't alot ANY action
	if( iCurrentProfileMode < 4 )
	{
		btn->uiFlags&=~(BUTTON_CLICKED_ON);
		fButtonPendingFlag = TRUE;
		return;
	}


	if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
	{
		 btn->uiFlags|=(BUTTON_CLICKED_ON);
		  
	}
	else if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
	{
		if (btn->uiFlags & BUTTON_CLICKED_ON)
		{
      // play voice
			if( ! SoundIsPlaying( uiVoiceSound ) )
			{
        uiVoiceSound = PlayVoice( );
			}	
			btn->uiFlags&=~(BUTTON_CLICKED_ON);
			fButtonPendingFlag = TRUE;
		}
	}	
} 
Ejemplo n.º 4
0
void
PlayAudio(char *name, char mode)
{
    ssize_t bytes = 0;
    bytes = load_audio_file(name, &soundbuf, &soundbuf_size);
    soundbuf_used = (bytes > 0) ? bytes : 0;
    PlayVoice();
}
Ejemplo n.º 5
0
void CRadio::OnRadioMessage(int id, EntityId fromId)
{
	int groupId=id/RADIO_GROUP_SIZE;
	int keyId=id%RADIO_GROUP_SIZE;

	char *pSoundName,*pSoundText;
	int variations = 1;
	bool result=GetRadioSoundName(m_pGameRules,m_TeamName,groupId+1,keyId+1,&pSoundName,&pSoundText, &variations);

	assert(result);

	if(g_pGame->GetGameRules())
	{
		ILocalizationManager *pLocalizationMan = gEnv->pSystem->GetLocalizationManager();

		wstring completeMsg;
		wstring wRadio, wSoundText;
		pLocalizationMan->LocalizeString("@mp_radio", wRadio);
		pLocalizationMan->LocalizeString(pSoundText, wSoundText);

		IEntity *pEntity = gEnv->pEntitySystem->GetEntity(fromId);

		if(pEntity)
		{
			Vec2i grid(0,0);
			completeMsg += L"(";
			completeMsg += wRadio;
			completeMsg += L", ";
			wchar_t letter = 'A' + grid.x - 1;
			wchar_t number = '0' + grid.y;
			completeMsg += letter;
			completeMsg += number;
			completeMsg += L"): ";
		}

		completeMsg += wSoundText;


		//pLocalizationMan->FormatStringMessage(localizedString, completeMsg, "@mp_radio", pSoundText);

		//g_pGame->GetGameRules()->OnChatMessage(eChatToTeam, fromId, 0, completeMsg.c_str());

		string sound = pSoundName;

		if(variations > 1)
		{
			int rand = Random(variations);
			sound += string().Format("_0%1d", rand+1);
		}

		PlayVoice(sound.c_str());
	}
}
Ejemplo n.º 6
0
void IMPPortraitRegionButtonCallback( MOUSE_REGION * pRegion, INT32 iReason )
{
	// callback handler for imp portrait region button events

	if ( iReason & MSYS_CALLBACK_REASON_INIT )
	{
		return;
	}
	if ( iReason & MSYS_CALLBACK_REASON_LBUTTON_UP )
	{
		if ( !SoundIsPlaying( uiVocVoiceSound ) )
		{
			uiVocVoiceSound = PlayVoice( );
		}
	}
}
Ejemplo n.º 7
0
void
play_audio(int sidx, int mode)
{
    char filename[40];
    ssize_t size;
    char *name = seq_filename(sidx, mode);

    if (!name) {
        CWARNING4(audio, "failed request for sound idx %d, mode %d",
                  sidx, mode);
        return;
    }

    snprintf(filename, sizeof(filename), "%s.ogg", name);
    CINFO3(audio, "play sound file `%s'", filename);
    size = load_audio_file(filename, &soundbuf, &soundbuf_size);
    soundbuf_used = (size > 0) ? size : 0;
    PlayVoice();
}
Ejemplo n.º 8
0
BOOL SaveWnd::selectExec()
{
	int		i;
	BOOL	bSetCur = FALSE;
	int		oldSelect = selectNum, oldBtn = btnSelect;
	switch(state){
	  case save_fadein:
		if(timeGetTime() >= startTime){
			alpha = 1.0f;
			state = save_exec;
		}else{
			alpha = 1.0f - (startTime -timeGetTime()) /500.0f;
		}
		SetAlpha();
		btn[2].selectRect.top = 565; btn[2].selectRect.bottom = btn[2].selectRect.top+25;
		btn[2].selectRect.left = LONG(709 +(1.0f- alpha)*(47+40*4));
		btn[2].selectRect.right = btn[2].selectRect.left +86;
		return TRUE;
	  case save_fadeout:
		if(timeGetTime() >= startTime){
			alpha = 0;
			changeExecMode(bak_mode);	
			return FALSE;
		}
		alpha = (startTime -timeGetTime()) /500.0f;
		SetAlpha();
		btn[2].selectRect.top = 457+4*27;
		btn[2].selectRect.top += LONG((1.0f-alpha)*40);
		btn[2].selectRect.bottom = btn[2].selectRect.top +25;
		return TRUE;
	  case save_writeSure:
		if(keyState.push_left || keyState.push_right || keyState.push_up || keyState.push_down){
			bYesNo = !bYesNo;
			SetWindowCursorPos(sysInf.hWnd,yesnoBtn[bYesNo].selectRect.left+43, yesnoBtn[bYesNo].selectRect.top+12);
		}
		for(i=0;i<2;i++){
			if(yesnoBtn[i].CheckState(&sysInf.msPoint)){
				if(i==0){
					PlayEffectNum(evtHandle[11],SE_PUSH);
					state = save_writeExec;
					return TRUE;
				}else{
					PlayEffectNum(evtHandle[11],SE_CANCEL);
					state = save_exec;
				}
			}
		}
		if(keyState.push_cancel){
			PlayEffectNum(evtHandle[11],SE_CANCEL);
			state = save_exec;
		}
		return TRUE;
	  case save_loadSure:
		if(keyState.push_left || keyState.push_right || keyState.push_up || keyState.push_down){
			bYesNo = !bYesNo;
			SetWindowCursorPos(sysInf.hWnd,yesnoBtn[bYesNo].selectRect.left+43, yesnoBtn[bYesNo].selectRect.top+12);
		}
		for(i=0;i<2;i++){
			if(yesnoBtn[i].CheckState(&sysInf.msPoint)){
				if(i==0){
					if(SAV_Load( selectNum+offsetNum+1 )){
						PlayEffectNum(evtHandle[11],SE_PUSH);
						startTime = timeGetTime();
						state = save_loadEnd;
						return TRUE;
					}
					startTime = timeGetTime() +500;
					state = save_fadeout;
					return TRUE;
				}else{
					PlayEffectNum(evtHandle[11],SE_CANCEL);
					state = save_exec;
				}
			}
		}
		if(keyState.push_cancel){
			PlayEffectNum(evtHandle[11],SE_CANCEL);
			state = save_exec;
		}
		return TRUE;
	  case save_writeExec:
		new_time = selectNum+offsetNum+1;
		SAV_Save( new_time );
		useTable[selectNum+offsetNum] = TRUE;

		struct _stat	fstatus;
		char fname[32];
		wsprintf( fname, "save_%02d.sav", new_time );
		_stat(fname,&fstatus);
		file_time[selectNum+offsetNum] = fstatus.st_mtime;

		CreateInfo();
		startTime = timeGetTime();
		state = save_writeEnd;
	  case save_loadEnd:
	  case save_writeEnd:
		i = timeGetTime() -startTime;
		if(i>1000){
			if(state==save_writeEnd){
				changeExecMode(bak_mode);
			}else{
				changeExecMode(event_exec_mode);
			}
			startTime = timeGetTime();
			if(voicefile[0])PlayVoice(voicefile, FALSE, 255);
			voicefile[0] = '\0';
			bFadeOut = TRUE;
		}
		return TRUE;
	}
	btnSelect = 0xff;
	for(i=0;i<3;i++){
		if(btn[i].CheckState(&sysInf.msPoint)){
			btnSelect = i;
			switch(i){
			  case 0:	
				PlayEffectNum(evtHandle[11],SE_PUSH);		
				if(0==offsetNum)offsetNum = 45;
				else offsetNum -= 5;
				CreateInfo();
				return TRUE;
			  case 1:	
				PlayEffectNum(evtHandle[11],SE_PUSH);		
				offsetNum += 5;
				if(offsetNum>45)offsetNum = 0;
				CreateInfo();
				return TRUE;
			  default:	
				PlayEffectNum(evtHandle[11],SE_CANCEL);		
				startTime = timeGetTime() +500;
				state = save_fadeout;
				return TRUE;
			}
		}else if(btn_onCursor==btn[i].GetState()){
			btnSelect = i;
			if(oldBtn != btnSelect){
				PlayEffectNum(evtHandle[11],SE_SELECT);		
			}
		}
	}
	for(i=0;i<10;i++){
		if(pageBtn[i].CheckState(&sysInf.msPoint)){
			PlayEffectNum(evtHandle[11],SE_PUSH);
			btnSelect = i+3;
			offsetNum = i*5;
			CreateInfo();
			return TRUE;
		}else if(btn_onCursor==pageBtn[i].GetState()){
			btnSelect = i+3;
			if(oldBtn != btnSelect){
				PlayEffectNum(evtHandle[11],SE_SELECT);
			}
		}
	}
	if(keyState.push_action){
		if(selectNum<5){
			if(useTable[selectNum+offsetNum]){
				PlayEffectNum(evtHandle[11],SE_PUSH);
				SetWindowCursorPos(sysInf.hWnd,yesnoBtn[0].selectRect.left +43, yesnoBtn[0].selectRect.top +12);
				if(mode==save_mode) state = save_writeSure;
				else state = save_loadSure;
				return TRUE;
			}else if(mode==save_mode){
				PlayEffectNum(evtHandle[11],SE_PUSH);
				state = save_writeExec;
				return TRUE;
			}
		}
	}else if(keyState.push_cancel){
		PlayEffectNum(evtHandle[11],SE_CANCEL);		
		startTime = timeGetTime() +500;
		state = save_fadeout;
		return TRUE;
	}else if(keyState.push_up){
		for(i=0;i<5;i++){
			if(selectNum==0xff){
				selectNum = 0;
			}else if(selectNum==0){
				selectNum = 4;
				if(0==offsetNum)offsetNum = 45;
				else offsetNum -= 5;
				CreateInfo();
			}else{
				selectNum --;
			}
			if(mode==save_mode || useTable[selectNum+offsetNum])break;
		}
		if(i==5){
			selectNum = 0xff;
		}else{
			bSetCur = TRUE;
		}
	}else if(keyState.push_down){
		for(i=0;i<5;i++){
			if(selectNum>=4){
				selectNum = 0;
				offsetNum += 5;
				if(offsetNum>45)offsetNum = 0;
				CreateInfo();
			}else{
				selectNum ++;
			}
			if(mode==save_mode || useTable[selectNum+offsetNum])break;
		}
		if(i==5){
			selectNum = 0xff;
		}else{
			bSetCur = TRUE;
		}
	}else if(keyState.push_left){
		if(0==offsetNum)offsetNum = 45;
		else offsetNum -= 5;
		CreateInfo();
		return TRUE;
	}else if(keyState.push_right){
		offsetNum += 5;
		if(offsetNum>45)offsetNum = 0;
		CreateInfo();
		return TRUE;
	}
	if(bSetCur){
		if(sysInf.msPoint.x>=20 && sysInf.msPoint.x<706){
			point.x = sysInf.msPoint.x;
		}else{
			point.x = 20 +40;
		}
		point.y = 18 +40 +selectNum*100;
		SetWindowCursorPos(sysInf.hWnd, point.x, point.y);
	}else{
		selectNum = 0xff;
		for(i=0;i<5;i++){
			rect.left = 20;
			rect.right = rect.left +686;
			rect.top = 18 +100*i;
			rect.bottom = rect.top +96;
			if(myPtInRect(&rect, &sysInf.msPoint)){
				if(mode==save_mode || useTable[i+offsetNum]){
					selectNum = i;
					break;
				}
			}
		}
	}
	if(0xff != selectNum){
		yesnoBtn[0].selectRect.top = yesnoBtn[1].selectRect.top = 18+128+100*selectNum;
		yesnoBtn[0].selectRect.bottom = yesnoBtn[1].selectRect.bottom = yesnoBtn[0].selectRect.top +25;
		if(selectNum!=oldSelect){
			PlayEffectNum(evtHandle[11],SE_SELECT);
		}
	}
	return TRUE;
} // SaveWnd::selectExec
Ejemplo n.º 9
0
int32_t main()
{

/***************************************************************************
*       ClkInit()
****************************************************************************/
	ClkInit();

/***************************************************************************
*       GPIOInit();
****************************************************************************/
//	DrvGPIO_InitFunction(E_FUNC_GPIO);
	outpw(&SYS->P0_MFP, 0);
	outpw(&SYS->P1_MFP, 0);
	outpw(&SYS->P2_MFP, 0);
	outpw(&SYS->P3_MFP, 0);
	outpw(&SYS->P4_MFP, 0);

	_GPIO_SET_PIN_MODE(MODEM_ON_PORT, MODEM_ON_PIN, GPIO_PMD_OUTPUT);
	ModuleOn(TRUE);

	_GPIO_SET_PIN_MODE(MODEM_POWER_PORT, MODEM_POWER_PIN, GPIO_PMD_OUTPUT);
	ModulePowerOn(FALSE);

	_GPIO_SET_PIN_MODE(LOCK_POWER_PORT, LOCK_POWER_PIN, GPIO_PMD_OUTPUT);
	LockPower(FALSE);

	_GPIO_SET_PIN_MODE(KEY_HELP_PORT, KEY_HELP_PIN, GPIO_PMD_QUASI);
	_GPIO_SET_PIN_MODE(KEY_BAT_PORT, KEY_BAT_PIN, GPIO_PMD_QUASI);

	_GPIO_SET_PIN_MODE(SLEEP_PORT, SLEEP_PIN, GPIO_PMD_OUTPUT);
	ModemSleep(FALSE);

	_GPIO_SET_PIN_MODE(LED_PORT, LED_PIN, GPIO_PMD_OUTPUT);
	
	LedDark();
	
	_GPIO_SET_PIN_MODE(INT_PORT, INT_PIN, GPIO_PMD_INPUT);

/***************************************************************************
*       TimerInit();
****************************************************************************/
	SysTick_Config(SYS_TICK);
//	SYS_LockReg();

/***************************************************************************
*       UartInit();
****************************************************************************/
	UartInit();
//	debug(VERSION);
//	DrvSYS_GetPLLClockFreq();

/***************************************************************************
*       WatchdogInit();
****************************************************************************/	
	WatchdogInit();

//	udpTest();
	NvInit();



 	WhatToDo();
	AdcInit();
	
	
	
	WaitLockPower();

  LockPower(!custermParam.param.lockState);


	InitMsgDebug();	
	
	if( Communication(10) == FALSE )
		SoftReset();

	if( isCheckingBattery )
	{
		delay_50ms(40);
		MeasurePower(4);
	}
	else
	{
		MeasurePower(2);
	}
					
	Flag_ModuleOn = TRUE;
	//Flag_ModuleOn = TRUE;
	ModemVolumeInit();

	///--------------------24.11.2015----------------------------------------------
	////////////////////////////////////////////////////////////////////////////////////////
while(PressHelp()&&(tmp_my<200)&&(PressBatter())){
	tmp_my++;
		
	delay_50ms(1);
if (tmp_my>=150) {
	  LedLight(144);
	    if (custermParam.param.lockState) {
														LockPower(TRUE);
														custermParam.param.lockState = FALSE;
												    WriteToNv( &custermParam ); //- save to eeprom
  													PlayVoice("\"unitUnlock.wav\",2\r");
														delay_ms(2000);
			                      LockPower(FALSE);
			
			} else {
	                          //  debug("ins");
															while(PressBatter()){};
														 tmp_my=0;
												while (tmp_my<25){               
																											tmp_my++;
																											delay_ms(150);
																											if (PressBatter()){counterPress++;
																																				while(!PressBatter()){};
																																					}
																										  if (counterPress>2){ 
																																					PlayVoice("\"unitLock.wav\",2\r");
																																					delay_ms(2000);
																																					custermParam.param.lockState = TRUE;
																																					WriteToNv( &custermParam ); //- save to eeprom
																																		      tmp_my=0;
																																					delay_ms(2000);
																																					LockPower(DISABLE);

																																				}
																											}
													LedBlink();
										} 
					///////				
			tmp_my=0;
			}

}

while(custermParam.param.lockState){}
 
///////////////////////////////////////////////////////////////////////////////////////////////													
#ifdef DELAY_TEST
	DelayTest();
#endif
	PowerOn();
	
	

	
	if(state==STATE_POWERING_DOWN || Flag_Power_Down)
	{
		Flag_Power_Down = FALSE;
		EnterPowerDown();
		while( TimerWait )
			FeedWatchdog();
		PowerDown();
		//不会返回
	}
	
	InitVariables();
	  
	if(state == STATE_NULL)
	{
		state = STATE_1ST_CALL;
		TimerWait = 100;	// 5 s
	}
	
	TimerTestMode = 6000;
	//debug("ent main loop");
	while(1)
	{  
			
		///--------------------
				if (!TimerTestMode && state==STATE_TEST)
										{ 
										PlayMusic(MUSIC_PD);
										EnterPowerDown();
										}
		
		///--------------------
		
		if( Flag_Incomming )
		{
	#if 1
			TimerWait = 200;
			Flag_Incomming = FALSE;
			TimerStandby = custermParam.param.delay;
			//if(state != STATE_ACTIVE)
			{
				ModemSleep(FALSE);
				state = STATE_INCOMMING;
			}
	#else
			Flag_Incomming = FALSE;
			if(state != STATE_INCOMMING)
			{
				state = STATE_INCOMMING;
				ModemSleep(FALSE);
				EnterAnswer();
			}
	#endif
		}
		
		if(TimerWait == 0)
		{
			switch(state)
			{
									
			case STATE_POWERING_DOWN:
				PowerDown();
				break;

			case STATE_1ST_CALL:
				RegisterWait();
				break;

			case STATE_REGISTER_OK:	
				GetCpsiInfo();
				if( Flag_ObtainCpsi==TRUE)
				{
					state = STATE_GSM_STEADY;
					if( Flag_SimExist )
					{
						//delay_50ms(200);
						SockOpen();
						TimerWait = 400;
					}
					else
					{
						TimerWait = 60;
					}
				}
				else
				{
					TimerWait = 70;
				}
				break;

			case STATE_GSM_STEADY:	
				if( gPhoneNumOk==PHONE_NUM_READY || Flag_SimExist==FALSE)
					EnterCall();
				else
					TimerWait = 40;
				break;
				
			case STATE_CALL_PROMPT:
				Call();
				break;

			case STATE_ALERT:
				EnterCallFail();
				break;
			
			case STATE_NEXT_CALL:
				Redial();
				break;				

			case STATE_BATT_DISPLAY:
				EnterPowerDown();
				break;

			case STATE_INCOMMING:
				TimerStandby = custermParam.param.delay;
				EnterStandby();
				break;
			}
		}

		if( TimerSock==0 && Flag_SimExist
			&& ( (state>=STATE_GSM_STEADY && state<STATE_STANDBY) || progress>=TEST_GPS ) )
		{
			switch(sockState)
			{
			//case SOCKSTATE_NULL:
			case SOCKSTATE_CONFIG:				
			case SOCKSTATE_OPENNING:
				SockOpen();	// 打开失败,从新打开
				break;

			case SOCKSTATE_OPENED:
				SendAtWaitRsq(50, 1, FALSE, "AT+CIPOPEN=0,\"UDP\",,,%s\r\n", custermParam.param.local_port);
				TimerSock = 80;
				break;
	#if 0
			case SOCKSTATE_CONNECTING:
				SockConnect();	// 连接失败,从新连接
				break;
	#endif
			case SOCKSTATE_CONNECT_OK:		
				if( witchApn == 1)
					ClientInit();
				break;

			default:
				break;
			}
		}

		KeyHandle();

		SecondHandle();
		//SignalCheck();
		BatterCheck();
		PowerDownHandle();
		MsgHandle();
											
		if( Flag_SimExist )
		{
			UdpHandle();
			SmsHandle();
			PowerDownHandle();
		}
		
		FeedWatchdog();
	}
}	
Ejemplo n.º 10
0
void TinMan::Run()
{
	FMOD::Sound * primarySound = GetRandomSound();
	FMOD::Channel * primaryChannel;
	result = system->playSound(FMOD_CHANNEL_FREE, primarySound, true, &primaryChannel);
	ERRCHECK();
	primaryChannel->setVolume(0.f);
	primaryChannel->setPaused(false);

	FMOD::Sound * secondarySound = 0;
	FMOD::Channel * secondaryChannel = 0;

	const unsigned int crossfadeTime = 2500;

	time_t voiceStartTime = time(0) + 10 + (rand() % 20);

	while(true)
	{
		system->update();

		bool isPlaying = false;
		result = primaryChannel->isPlaying(&isPlaying);
		if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
		{
				ERRCHECK();
		}

		if(isPlaying)
		{
			unsigned int primaryPos = 0;
			unsigned int primaryLen = 0;

			result = primaryChannel->getPosition(&primaryPos, FMOD_TIMEUNIT_MS);
			if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
			{
					ERRCHECK();
			}

			result = primarySound->getLength(&primaryLen, FMOD_TIMEUNIT_MS);
			ERRCHECK();

			float volume = 1.f;
			if(primaryPos < crossfadeTime)
			{
				volume = std::max(0.f, std::min((float)(primaryPos)/(float)crossfadeTime, 1.f));
			}
			else if(primaryPos > primaryLen - crossfadeTime)
			{
				volume = std::max(0.f, std::min((float)(primaryLen - primaryPos)/(float)crossfadeTime, 1.f));
			}

			//std::cout<<std::time(0)<<" "<<voiceStartTime<<" "<<primaryPos<<"/"<<primaryLen<<" "<<volume<<"\n";

			result = primaryChannel->setVolume(volume);
			if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
			{
					ERRCHECK();
			}

			if(primaryPos > primaryLen - crossfadeTime)
			{
				if(!secondaryChannel)
				{
					secondarySound = GetRandomSound();
					result = system->playSound(FMOD_CHANNEL_FREE, secondarySound, true, &secondaryChannel);
					ERRCHECK();
					result = secondaryChannel->setVolume(1.f - volume);
					ERRCHECK();
					result = secondaryChannel->setPaused(false);
					ERRCHECK();
				}
				else
				{
					secondaryChannel->setVolume(1.f - volume);
					if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
					{
							ERRCHECK();
					}
				}
			}
		}
		else
		{
			if(secondaryChannel && secondarySound)
			{
				primaryChannel = secondaryChannel;
				primarySound = secondarySound;
				secondaryChannel = 0;
			}
			else
			{
				// for some reason all channels are stopped
				primarySound = GetRandomSound();
				result = system->playSound(FMOD_CHANNEL_FREE, primarySound, 0, &primaryChannel);
				ERRCHECK();
			}
		}

		if(time(0) >= voiceStartTime)
		{
			voiceStartTime = time(0) + 15 + (rand() % 25);
			PlayVoice();
		}

		boost::this_thread::sleep(boost::posix_time::milliseconds(10));
	}
}