#include "AudioPlayerContainerView.h"
#include "AudioPlayerEngine.h"
const TInt KPlayerAdapterDefaultVolumeLevel(2);

CAudioPlayerEngine* CAudioPlayerEngine::NewL()
{
	CAudioPlayerEngine* self=CAudioPlayerEngine::NewLC();
	CleanupStack::Pop(self);
	return self;

}

CAudioPlayerEngine* CAudioPlayerEngine::NewLC()
{
	CAudioPlayerEngine* self=new(ELeave) CAudioPlayerEngine;
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
}

CLoudnessEffect* CLoudnessEffect::NewL(CMdaAudioPlayerUtility& iAudioPlayer,TBool aEnable)
{
	CLoudnessEffect* self=new(ELeave) CLoudnessEffect();
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);
	return self;
}

CBassEffect* CBassEffect::NewL(CMdaAudioPlayerUtility& iAudioPlayer,TBool aEnable)
{
	CBassEffect* self=new(ELeave) CBassEffect();
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);
	return self;
}

CStereoEffect* CStereoEffect::NewL(CMdaAudioPlayerUtility& iAudioPlayer,TBool aEnable)
{
	CStereoEffect* self=new(ELeave) CStereoEffect();
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);
	return self;
}

CAudioPlayerEngine::CAudioPlayerEngine()
{

}

void CAudioPlayerEngine::ConstructL()
{
	iState=EIdle;
}

CAudioPlayerEngine::~CAudioPlayerEngine()
{
	Cleanup();
}

void CAudioPlayerEngine::Cleanup()
{
	if(iAudioPlayer)
		{
		iAudioPlayer->Stop();
		iAudioPlayer->Close();
		delete iAudioPlayer;
		iAudioPlayer=NULL;
		iState=EIdle;
		}
}

void CAudioPlayerEngine::PlayFileL(const TDesC16 &aFile)
	{
	if (iState == EIdle)
		{
			
		
		iAudioPlayer = CMdaAudioPlayerUtility::NewFilePlayerL(aFile,*this);
		iState=EPlayFilePrepare;
		}
	}

void CAudioPlayerEngine::StopFileL()
	{
	if(iState==EPlayFilePlaying)
		{
		iAudioPlayer->Stop();
		iAudioPlayer->Close();
		iState=EIdle;
		}
	}
void CAudioPlayerEngine::PauseL()
	{
	if(iState==EPlayFilePlaying)
		{
		iAudioPlayer->Pause();
		iState=EPlayFilePrepare;
		}
	}
void CAudioPlayerEngine::PlayL()
	{
	if(iState==EPlayFilePrepare)
		{
		iAudioPlayer->Play();
		iState=EPlayFilePlaying;
		}
	}
void CAudioPlayerEngine::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds &aDuration)
	{
		if (aError)
		{
			Cleanup();
			return;
		}
		
	}

void CAudioPlayerEngine::MapcPlayComplete(TInt aError)
{
	Cleanup();
}

void CAudioPlayerEngine::SetVolume(TInt volume)
{
	if (iAudioPlayer)
	{
	iAudioPlayer->SetVolume(volume);
	}
}
void CAudioPlayerEngine::Volume()
	{
	TInt volume = KPlayerAdapterDefaultVolumeLevel;
	if ( iAudioPlayer)
		{
		if( !iVolFactor )
			{
			TInt maxVol = iAudioPlayer->MaxVolume();
	
			iVolFactor=10.0/maxVol;
			}
		iAudioPlayer->GetVolume(volume);
		volume = (TInt)(iVolFactor*volume);
		};
	return ;
}
TInt CAudioPlayerEngine::Control(TInt ant)
	{
	
	return ant;
	}
TInt cnt;
void CAudioPlayerEngine::PlayPauseL()
{
	if(iState==EPlayFilePlaying)
		{
		PauseL();
		}
	else
		if(iState==EPlayFilePrepare)
			{
			PlayL();
			}
}

void CLoudnessEffect::ConstructL()
{
	iLoudnessEffect=CLoudnessEffect::NewL(*iAudioPlayerEngine->iAudioPlayer,EFalse);
}

void CLoudnessEffect::EnableEffect()
{
	
	iLoudnessEffect->EnableL();
	iLoudnessEffect->RegisterObserverL(*iMAudioEffectObserver);
}

void CLoudnessEffect::DisableEffect()
{
	iLoudnessEffect->DisableL();
	iLoudnessEffect->UnRegisterObserver(*iMAudioEffectObserver);
}

void CBassEffect::ConstructL()
{
	iBassEffect=CBassEffect::NewL(*iAudioPlayerEngine->iAudioPlayer,EFalse);
}

void CBassEffect::EnableEffect()
{
	iBassEffect->EnableL();
	iBassEffect->RegisterObserverL(*iMAudioEffectObserver);
}

void CBassEffect::DisableEffect()
{
	iBassEffect->DisableL();
	iBassEffect->UnRegisterObserver(*iMAudioEffectObserver);
}

void CStereoEffect::ConstructL()
	{
		iStereoEffect=CStereoEffect::NewL(*iAudioPlayerEngine->iAudioPlayer,EFalse);
	}

void CStereoEffect::EnableEffect()
	{
	
	iStereoEffect->EnableL();
	iStereoEffect->RegisterObserverL(*iMAudioEffectObserver);
	}

void CStereoEffect::DisableEffect()
	{
		iStereoEffect->DisableL();
		iStereoEffect->UnRegisterObserver(*iMAudioEffectObserver);
	}
void CLoudnessEffect::ApplyL()
{

}

void CBassEffect::ApplyL()
{

}

void CStereoEffect::ApplyL()
{

}

CLoudnessEffect::CLoudnessEffect()
{
	
}

CBassEffect::CBassEffect()
{
		
}

CLoudnessEffect::~CLoudnessEffect()
{

}

CBassEffect::~CBassEffect()
{

}
void CBassEffect::EffectChanged(const CAudioEffect* aObservedEffect,TUint8 aEvent)
{

}

void CLoudnessEffect::EffectChanged(const CAudioEffect* aObservedEffect,TUint8 aEvent)
{

}