📄 playogg.cpp
字号:
// PlayOgg.cpp
//
//
//
#include <e32base.h>
#include <MdaAudioSampleEditor.h>
#include <e32cons.h>
#include <eikconso.h>
class CAudioPlayer : public CActive, public MMdaObjectStateChangeObserver
{
public:
static CAudioPlayer* NewLC(const TDesC& aFileName);
virtual ~CAudioPlayer();
void Activate();
virtual void RunL();
virtual void DoCancel();
virtual void MoscoStateChangeEvent(CBase* aObject, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode);
private:
void Stop();
private:
CAudioPlayer();
const TDesC* iFileName;
CMdaAudioRecorderUtility* iPlayer;
TBool iStopped;
//CConsoleBase* iConsole;
};
CAudioPlayer::CAudioPlayer()
: CActive(EPriorityNormal)
{
}
CAudioPlayer::~CAudioPlayer()
{
/*if (iConsole)
{
iConsole->Printf(_L("Press any key to exit\n"));
iConsole->Getch();
}*/
if (iPlayer) iPlayer->Close();
//delete iConsole;
delete iPlayer;
}
CAudioPlayer* CAudioPlayer::NewLC(const TDesC& aFileName)
{
CAudioPlayer* self = new(ELeave)CAudioPlayer;
CleanupStack::PushL(self);
self->iFileName = &aFileName;
self->iPlayer = CMdaAudioRecorderUtility::NewL(*self);
CActiveScheduler::Add(self);
//self->iConsole = Console::NewL(_L("PlayOgg"), TSize(50, 20));
//self->iConsole->Printf(_L("Hello\n"));
/*CEikConsoleScreen* console = new(ELeave)CEikConsoleScreen;
console->ConstructL(_L("PlayOgg"), TSize(50, 20), 0);
self->iConsole = console;*/
User::InfoPrint(_L("CAudioPlayer::NewLC"));
return self;
}
void CAudioPlayer::Activate()
{
SetActive();
TRequestStatus* status = &iStatus;
User::RequestComplete(status, KErrNone);
}
void CAudioPlayer::RunL()
{
//iConsole->Printf(_L("Opening file...\n"));
iPlayer->OpenFileL(*iFileName);
}
void CAudioPlayer::DoCancel()
{
}
void CAudioPlayer::MoscoStateChangeEvent(CBase* /*aObject*/, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode)
{
if (aErrorCode!=KErrNone)
{
//iConsole->Printf(_L("Error: %d"), aErrorCode);
Stop();
}
switch (aPreviousState)
{
case CMdaAudioClipUtility::ENotReady:
switch (aCurrentState)
{
case CMdaAudioClipUtility::EOpen:
//iConsole->Printf(_L("File Opened.\n"));
iPlayer->SetVolume(iPlayer->MaxVolume());
iPlayer->PlayL();
break;
default:
Stop();
break;
}
break;
case CMdaAudioClipUtility::EOpen:
switch (aCurrentState)
{
case CMdaAudioClipUtility::EPlaying:
//iConsole->Printf(_L("Playing"));
// playing.. nothing to do [wait for another callback]
break;
default:
Stop();
break;
}
break;
case CMdaAudioClipUtility::EPlaying:
switch (aCurrentState)
{
case CMdaAudioClipUtility::EPlaying:
break;
case CMdaAudioClipUtility::EOpen:
//iConsole->Printf(_L("Play complete"));
// completed.
Stop();
break;
default:
Stop();
break;
}
break;
}
}
void CAudioPlayer::Stop()
{
if (!iStopped)
{
CActiveScheduler::Stop();
iStopped=ETrue;
}
}
void DoPlayL()
{
User::After(TTimeIntervalMicroSeconds32(1000000));
_LIT(KFileName, "C:\\vorbis.ogg");
CActiveScheduler* sched = new(ELeave)CActiveScheduler;
CleanupStack::PushL(sched);
CActiveScheduler::Install(sched);
CAudioPlayer* player = CAudioPlayer::NewLC(KFileName());
player->Activate();
sched->Start();
CleanupStack::PopAndDestroy(2);
}
TInt E32Main()
{
User::InfoPrint(_L("E32Main"));
CTrapCleanup* cleanup = CTrapCleanup::New();
if (!cleanup) return -1;
TRAPD(err, DoPlayL());
delete cleanup;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -