📄 mytoneclass.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 + -