⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 playogg.cpp

📁 这可能就是传说中symbian oggPlay的源代吗吧
💻 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 + -