📄 playeradapter.cpp
字号:
// Copyright (c) 2001, Nokia Mobile Phones. All rights reserved.
#include <eikmenup.h>
#include "playeradapter.h"
// Identifying string for this audio utility
_LIT(KAudioPlayer, "Player");
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
TRAPD( err,
iMdaAudioPlayerUtility = CMdaAudioPlayerUtility::NewFilePlayerL(aFileName, *this, EMdaPriorityMax, EMdaPriorityPreferenceNone)
);
if (err != KErrNone)
{
iMdaAudioPlayerUtility = NULL;
}
}
CPlayerAdapter::~CPlayerAdapter()
{
delete iMdaAudioPlayerUtility;
iMdaAudioPlayerUtility = NULL;
}
// Note that this implementation of the virtual function does not leave.
void CPlayerAdapter::PlayL()
{
if(iState == EReadyToPlay)
{
iMdaAudioPlayerUtility->Play();
iState = EPlaying;
}
else
{
iWantToPlay = ETrue;
}
}
// Note that this implementation of the virtual function does not leave.
void CPlayerAdapter::StopL()
{
iWantToPlay = EFalse;
if (iState == EPlaying)
{
iMdaAudioPlayerUtility->Stop();
iState = EReadyToPlay;
}
}
const TDesC& CPlayerAdapter::Identify()
{
return KAudioPlayer;
}
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);
}
}
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 */
SetVolume(iMdaAudioPlayerUtility->MaxVolume() / iVolumeFraction);
if (iWantToPlay && iState == EReadyToPlay)
{
// We can't leave here.
TRAPD(err, PlayL());
}
}
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -