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

📄 mytoneclass.cpp

📁 《基于symbian os 的手机开发与应用》 源代码 何伟 著
💻 CPP
字号:
// MyToneClass.cpp: implementation of the CMyToneClass class.
//
//////////////////////////////////////////////////////////////////////

#include "MyToneClass.h"
#include <eikalign.h>
#include <aknutils.h>
#include <f32file.h>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define KFrequency  100
#define KInterval   4000000
_LIT(KWavFile,"c:\\system\\apps\\sound\\music.wav");
_LIT(KStreamFile,"c:\\system\\apps\\sound\\S.wav");

CMyToneClass* CMyToneClass::NewLC(MBasicSoundObserver& aObserver)
{
  CMyToneClass* self=new(ELeave)CMyToneClass(aObserver);
  CleanupStack::PushL(self);
  self->ConstructL();
  return self;
}
CMyToneClass* CMyToneClass::NewL(MBasicSoundObserver& aObserver)
{
	CMyToneClass* self=CMyToneClass::NewLC(aObserver);
	CleanupStack::Pop();
	return self;
}
void CMyToneClass::ConstructL()
{

}
CMyToneClass::CMyToneClass(MBasicSoundObserver& aObserver):iObserver(aObserver)
{
  
}

CMyToneClass::~CMyToneClass()
{
  delete iPlayer;
  iPlayer=NULL;
}
void CMyToneClass::MatoPrepareComplete(TInt aError)
{
	if(aError==KErrNone)
	{
		iPlayer->SetVolume(iPlayer->MaxVolume());
		iPlayer->SetPriority(0,EMdaPriorityPreferenceTime);
        iPlayer->Play();
	}
	else
	{
      iPlayer->CancelPlay();
	}
}
void CMyToneClass::MatoPlayComplete(TInt aError)
{
	if(aError==KErrNone)
	{
      delete iPlayer;
	  iPlayer=NULL;
	  iObserver.HandelPlayStopL();
	  
	}
}
void CMyToneClass::PlayToneL()
{
	iPlayer = CMdaAudioToneUtility::NewL(*this);
	iPlayer->PrepareToPlayTone(KFrequency,TTimeIntervalMicroSeconds(KInterval));
	
}
void CMyToneClass::StopL()
{
	if(iPlayer)
	{
	iPlayer->CancelPlay();
	delete iPlayer;
	iPlayer=NULL;
	iObserver.HandelPlayStopL();
	}
	if(iPlayerClip)
	{
     iPlayerClip->Stop();
	 delete iPlayerClip;
	 iPlayerClip=NULL;
	 iObserver.HandelPlayStopL();
	}

	
}

void CMyToneClass::PlayClipL()
{

	iPlayerClip=CMdaAudioPlayerUtility::NewFilePlayerL(KWavFile,*this);

}

void CMyToneClass::PlayStreamL()
{
	RFs fs;
	CleanupClosePushL(fs);
	User::LeaveIfError(fs.Connect());

	RFile file;
	CleanupClosePushL(file);
	TFileName streamfile(KStreamFile);
	User::LeaveIfError(CompleteWithAppPath(streamfile));
	User::LeaveIfError(file.Open(fs,streamfile,EFileRead|EFileShareReadersOnly));

	TInt FileSize=0;
	file.Size(FileSize);
	iStreamData=new(ELeave)TUint8[FileSize];
	iStreamBuffer=new(ELeave)TPtr8(iStreamData,FileSize,FileSize);
	file.Read(*iStreamBuffer);

	CleanupStack::PopAndDestroy(2);
	iState=EPlaying;
    iAudioOutputStream=CMdaAudioOutputStream::NewL(*this);
	iStreamSettings.iSampleRate=TMdaAudioDataSettings::ESampleRate8000Hz;
	iStreamSettings.iSampleRate=TMdaAudioDataSettings::EChannelsMono;
	iAudioOutputStream->Open(&iStreamSettings);

}


void CMyToneClass::MapcInitComplete(TInt aError,const TTimeIntervalMicroSeconds& /*aDuration*/)
{
	if(aError==KErrNone)
	{
		iPlayerClip->SetVolume(iPlayerClip->MaxVolume());
		iPlayerClip->Play();
	}
	else
	{
		
		iPlayerClip->Stop();
		iObserver.HandelPlayStopL();

	}
}
void CMyToneClass::MapcPlayComplete(TInt aError)
{
  	if(aError==KErrNone)
	{
		delete iPlayerClip;
		iPlayerClip=NULL;
		iObserver.HandelPlayStopL();
	}
	else
	{
		iPlayerClip->Stop();
	}
}
// Stream output callback
void CMyToneClass::MaoscOpenComplete(TInt aError)
{
	if(aError==KErrNone)
	{
		TRAPD(err,iAudioOutputStream->WriteL(*iStreamBuffer));
	}
	else
	{
	//	Stop();
	}


}
void CMyToneClass::MaoscBufferCopied(TInt aError,const TDesC8&/* aBuffer*/)
{
  if(aError==KErrNone)
  {
	  TRAPD(err,iAudioOutputStream->WriteL(*iStreamBuffer))
      iAudioOutputStream->SetVolume(iAudioOutputStream->MaxVolume());
  }
}

void CMyToneClass::MaoscPlayComplete(TInt aError)
  {
	  if(aError==KErrNone)
	  {
		  iState=EStopped;
		  delete iAudioOutputStream;
		  iAudioOutputStream=NULL;
		  delete iStreamBuffer;
		  iStreamBuffer=NULL;
		  delete[] iStreamData;
		  iStreamData=NULL;

		  iObserver.HandelPlayStopL();
	  }


  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -