playeradapter.cpp
来自「mopoid game symbian os application devel」· C++ 代码 · 共 141 行
CPP
141 行
//
#include "PlayerAdapter.h"
CPlayerAdapter::CPlayerAdapter() :
iWantToPlay(EFalse),
iState(ENotReady),
iVolumeFraction(2)
{
}
//CPlayerAdapter* CPlayerAdapter::NewL(const TDesC& aFileName, CSoundAppUi& aAppUi)
CPlayerAdapter* CPlayerAdapter::NewL(const TDesC& aFileName)
{
CPlayerAdapter* self = NewLC(aFileName);
CleanupStack::Pop(self);
return self;
}
CPlayerAdapter* CPlayerAdapter::NewLC(const TDesC& aFileName)
{
CPlayerAdapter* self = new (ELeave) CPlayerAdapter();
CleanupStack::PushL(self);
self->ConstructL(aFileName);
return self;
}
void CPlayerAdapter::ConstructL(const TDesC& aFileName)
{
// Create an audio player utility instance for playing sample data from a file
// causes MMdaAudioPlayerCallback::MapcInitComplete to be called
iMdaAudioPlayerUtility = CMdaAudioPlayerUtility::NewL(*this, EMdaPriorityNormal, EMdaPriorityPreferenceTime);
iMdaAudioPlayerUtility->OpenFileL(aFileName);
}
CPlayerAdapter::~CPlayerAdapter()
{
delete iMdaAudioPlayerUtility;
iMdaAudioPlayerUtility = NULL;
}
// Note that this implementation of the virtual function does not leave.
void CPlayerAdapter::Play()
{
if(iState == EReadyToPlay)
{
iMdaAudioPlayerUtility->Play();
iState = EPlaying;
}
else
{
iWantToPlay = ETrue;
}
}
// Note that this implementation of the virtual function does not leave.
void CPlayerAdapter::Stop()
{
iWantToPlay = EFalse;
if (iState == EPlaying)
{
iMdaAudioPlayerUtility->Stop();
iState = EReadyToPlay;
}
}
void CPlayerAdapter::SetVolume(TInt aVolume)
{
if(iState == EReadyToPlay || iState == EPlaying)
{
TInt maxVolume;
/* get the maximum volume which can be played */
if ( iMdaAudioPlayerUtility )
maxVolume = iMdaAudioPlayerUtility->MaxVolume();
else
maxVolume = 10;
/* bound the volume */
if(aVolume < 0) aVolume = 0;
if(aVolume > maxVolume) aVolume = maxVolume;
/* set the volume */
if ( iMdaAudioPlayerUtility )
iMdaAudioPlayerUtility->SetVolume(aVolume);
}
}
TBool CPlayerAdapter::IsPlaying()
{
return (iState == EPlaying);
}
void CPlayerAdapter::SetVolumeFraction(TInt aFraction)
{
iVolumeFraction = aFraction;
if((iState == EReadyToPlay || iState == EPlaying) && (aFraction > 0))
{
TInt maxVolume;
/* get the maximum volume which can be played */
if ( iMdaAudioPlayerUtility )
maxVolume = iMdaAudioPlayerUtility->MaxVolume();
else
maxVolume = 10;
TInt volume = maxVolume / aFraction;
/* set the volume */
if ( iMdaAudioPlayerUtility )
iMdaAudioPlayerUtility->SetVolume(volume);
}
}
// from MMdaAudioPlayerCallback
void CPlayerAdapter::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
{
iState = aError ? ENotReady : EReadyToPlay;
/* set an initial volume */
SetVolumeFraction(iVolumeFraction);
if (iWantToPlay && iState == EReadyToPlay)
{
// We can't leave here.
TRAPD(err, Play());
}
}
void CPlayerAdapter::MapcPlayComplete(TInt aError)
{
if ((aError == KErrNone) || (aError == KErrUnderflow)) // Err -10 == Buffer Underflow
iState = EReadyToPlay;
else
iState = ENotReady;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?